我正在构建一个基于前端(读取:面向Web)的HTTP API的分布式应用程序,该API调用底层(读取:非面向Web的)Thrift服务.
举个例子,我可能有:
所有单独的服务都依赖于核心服务,HTTP面向Web的API也是如此.我现在将它作为一个多模块项目,但我希望每个项目都是独立的(并在他们自己的存储库中进行跟踪 - 尽管我知道我仍然可以通过多模块构建来实现这一点).
tl;博士 -
是一个常见的构建实践,有一个单独构建的模块(核心服务),然后推送到maven repo(然后作为jar包含在其他项目中),或者在这种情况下更好地做一个多模块项目?
我正在尝试HandlerInterceptor使用Java Config在Spring中注册一个实例而不进行扩展WebMvcConfigurationSupport.我正在创建一个带有注释的库,当添加到@Configuration类中时,它会注册一个处理安全注释的拦截器.
我有一个实现使用WebMvcConfigurationSupport#addInterceptors,但与春天的其他自动工作冲突,并覆盖了一些应用程序自己的逻辑.对于应该简单的事情来说,它似乎也非常沉重.我现在正在尝试:
@Configuration
public class AnnotationSecurityConfiguration {
@Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping;
@PostConstruct
public void attachInterceptors() {
requestMappingHandlerMapping.setInterceptors(new Object[] {
new SecurityAnnotationHandlerInterceptor()
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎拦截器注册的实例RequestMappingHandlerMapping与应用程序实际用于Web请求的实例完全不同.另外,当BeanFactoryPostProcessor我作为一个实现时,我NullPointerException在HealthMvcEndpoint尝试时得到一个beanFactory.getBean(RequestMappingHandlerMapping.class)
我在Zookeeper上构建了一个服务发现层,用于在分布式环境中查找Thrift服务.我正在寻找在生产环境中运行这些服务的最佳方法.
目前,它是通过打包部署到Tomcat的战争来完成的.在servlet实例化期间,将创建Spring ApplicationContext,从而创建TThreadPoolServerTomcat内部.
我不喜欢这个,原因有两个:
在试图找到解决这个问题的最佳策略的过程中,我想出了几个选择:
有没有人建议他们以前如何处理托管分布式服务器.我最好只在Tomcat中使用HTTP吗?
我在Tomcat 8中使用JSR-356 WebSocket支持来驱动我正在处理的应用程序.到目前为止,看起来所有消息都在一个线程中处理.虽然我理解这背后的原因 - 以及为什么websockets以这种方式实现,有没有办法使用一个ExecutorService来处理进来的消息(没有在我的代码中创建ExecutorService)?
这将允许具有1个(或仅少数几个)网络选择器线程(以支持大量连接的客户端)的可伸缩性,同时允许对实际消息进行标准的基于线程的处理(当需要处理消息时)一个客户).
我没有看到任何特别允许改变的东西.
我有一个DefaultMessageListenerContainer配置如下:
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConcurrentConsumers(4);
container.setConnectionFactory(connectionFactory);
container.setDestinationName(String.format("Consumer.%s.VirtualTopic.%s", group, topic));
container.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
container.setSessionTransacted(true);
container.setMessageListener(new DelegatingMessageListener(listener, messageMapper, event));
container.start();
Run Code Online (Sandbox Code Playgroud)
消息容器永远不会收到消息,我的消息监听器永远不会被调用.保持其他所有相同,如果我只是将DefaultMessageListenerContainer切换到SimpleMessageListenerContainer,它可以工作 - 但是连接丢失后SimpleMessageListenerContainer不会恢复
日志中没有错误,几乎没有任何相关消息.有没有人有理由说明为什么会这样?
我在 Xcode 8 和 Swift 2.3 中看到分配工具的奇怪行为。我有一个deinit正在调用的对象 (A) ,除了 A 引用的一个对象之外的所有对象都被释放(据我所知,不是一个单独的内存问题),但该对象继续在分配工具中被列为“实时”和持久的。此外,当我尝试调试它的保留时,我看到的是:
请注意,我已确认 deinit 正在由以下人员执行:
A.__deallocating_deinit方法内部的释放 (-1) 引用计数然而,由于某种未知的原因,它似乎一直存在。
我有一个使用git和gitolite的系统设置.一切都运作良好,除了我希望我的结构是这样的:
本地环境 - >开发服务器 - >生产服务器
我在开发服务器上有一个repo设置,它已成功克隆到本地环境.现在,我需要的是开发服务器上的本地文件系统工作副本,但我不知道如何使用gitolite执行此操作.
git clone /home/gitolote/repositories/myrepo.git
Run Code Online (Sandbox Code Playgroud)
工作正常,直到我尝试推/拉,此时我得到这个:
remote: ENV GL_RC not set
remote: BEGIN failed--compilation aborted at hooks/update line 20.
remote: error: hook declined to update refs/heads/master
Run Code Online (Sandbox Code Playgroud)
关于如何用gitolite做这个的任何想法?
我知道以前曾以各种形式提出过这个问题.但是,我不是在寻找"使用https"的答案.我已经在使用HTTPS了,我并不担心有效载荷来回传输的敏感性.
但是,我正在处理的iPhone应用程序正在与我构建的REST API进行通信(我已经控制了应用程序和服务器 - 因此欢迎任何建议).
我使用OAuth2协议进行身份验证,这意味着我的"API密钥"是客户端ID和客户端密钥的组合,只需要传输即可获取access_token.之后,使用access_token包含请求主体的HMAC的头部(使用客户端秘密作为密钥)将所有请求发送到服务器.这种添加的唯一原因是有人无法使用JUST进行API请求access_token.
我正在谈论的API将在我发布应用程序时公开.所以我不一定担心别人能够对它进行API调用.
我关心的是:
我的猜测是,这个问题并没有真正的解决方案(除了使用UIWebView并制作一个美化的webapp),但我想我还是会在这里问一下.
如果应用程序需要使用客户端ID /客户端密码,您能想到保护客户端ID /客户端密钥的方法吗?
我需要将一些数据与HTML元素相关联,希望避免任何内存泄漏.显然,一个简单的解决方案是在元素上抛出某种标识符,然后创建一个字典映射,将该标识符映射到我需要的数据.但是,这是在用户将添加到其页面的javascript库中,因此我无法控制何时添加或删除元素.
我想要做的是将数据与页面上的HTML元素相关联,同时允许在删除元素时将数据用于GC.有没有办法做到这一点,不涉及编写我自己的定期GC来清理孤立的数据?向HTML元素添加属性是否安全?
我试图以非阻塞方式向流中写入大量数据(~250K).
抽象出复杂性和对象结构,这就是我正在运行的:
$fp = fsockopen('host', 80);
socket_set_blocking( $fp, false );
fwrite( $fp, $string, $length ); // Where $string is a 250K string
Run Code Online (Sandbox Code Playgroud)
但是,数据并非都写入.假设这是PHP的写缓冲区,我设置stream_set_write_buffer( $fp, 0 )但是也没有解决问题.
我把我的fwrite打成了4096B的块 - 看起来客户端发送了3个完整的批次(4096字节)和第四批的~1500B.对fwrite的任何和所有连续调用都返回0字节写入.
有没有人知道如何将这些数据排队以非阻塞的方式发送出去?如果我删除socket_set_blocking( $fp, false );- 一切正常.很明显,这是异步运行它的问题.
你的想法是什么?套接字扩展是否会对此有所帮助?它以不同方式处理缓冲区吗
注意:我故意编写此套接字传输层以避免因各种原因使用curl.使用curl_multi()不是一种选择.
我正在编写自己的MVC框架来练习,我有一个Request类.我想捕获请求的类型并相应地解析数据,无论是AJAX/JSON调用还是HTML/XML请求.
我目前正在使用:
$_SERVER['HTTP_ACCEPT']
Run Code Online (Sandbox Code Playgroud)
以及当使用var_dump时,返回application/json:
$.ajax({
type: 'post',
url: 'index',
dataType: 'json',
data: {
_method: 'put'
}
});
Run Code Online (Sandbox Code Playgroud)
var_dump($ _ SERVER ['HTTP_ACCEPT'])返回:
string(46) "application/json, text/javascript, */*; q=0.01"
Run Code Online (Sandbox Code Playgroud)
问题: 这种方法可靠吗?它总是有效吗?检测这样的ajax调用有任何安全问题吗?
请注意,我的框架中的所有ajax调用都必须具有dataType:'json',除非它是一种不同类型的调用,如HTML或XML.
我目前开发的系统使用MongoDB 2.4.4
我有一个用户集合.
有一个组合索引:{ "LASTNAME" : 1 , "FIRSTNAME" : 1 , "EMAIL" : 1 , "CITY" : 1 , "STATUS" : 1}
我也试过单个索引,没有性能提升
系统包含400.000个测试记录.
查询(来自org.springframework.data.mongodb.core.query.Query的Java调试):
{ "LASTNAME" : { "$regex" : "^Schm"}},
Fields: { "FIRSTNAME" : 1 , "EMAIL" : 1 , "CITY" : 1 , "STATUS" : 1 ,"LASTNAME" : 1},
Sort: { "LASTNAME" : 1 , "FIRSTNAME" : 1 , "EMAIL" : 1 , "CITY" : 1 , "STATUS" : 1}
Run Code Online (Sandbox Code Playgroud)
在16ms内完成.真是太棒了.
此查询未显示在MongoDB控制台中(此处没有要发布的调试信息).
但是,我喜欢搜索不仅仅是开头,它也应该不区分大小写.
查询:
{ …Run Code Online (Sandbox Code Playgroud) java ×3
php ×2
spring ×2
ajax ×1
encryption ×1
git ×1
gitolite ×1
html ×1
ios ×1
iphone ×1
javascript ×1
jms ×1
jquery ×1
json ×1
maven ×1
mongodb ×1
php-socket ×1
security ×1
sockets ×1
spring-jms ×1
spring-mvc ×1
swift ×1
thrift ×1
tomcat ×1
tomcat8 ×1
websocket ×1
working-copy ×1