Hystrix的信号量隔离中信号量是进程所有线程共享的吗?
Hystrix的线程隔离中,信号量隔离中信号量是一个java应用进程所有线程共享的吗?还是也有像线程池那样分开隔离,譬如拥有同一个commandKey属性的请求共享一个信号量?
另外,多个方法上用了@HystrixCommand注解,每个方法都有属性,譬如HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS这种,如果设置的值得不同,而因为这个值又是共享的,那么哪个起作用呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
按key来的,对应spring cloud就是一个服务名一个信号量,当前java进程中所有请求该服务的请求,都会先经过信号量。
如果不使用
@HystrixCommand
,直接集成ribbon,一个服务名就是一个信号量。如果使用了@HystrixCommand
,那么会一个@HystrixCommand
对应一个信号量。具体你可以断点AbstractCommand#getExecutionSemaphore()
1.根据commandKey 没有设置根据class
2.设置多个时相同下,应该会使用最先执行的设置的值。参考源码AbstractCommand#getExecutionSemaphore()。实际中应该不太会出现不同的策略。?
信号量本质就是一个静态Map,结构可以简单理解为Map<String, AtomicInteger>,其中key就是commandKey,每收到一个请求就根据commandKey取出对应的计数器加一,处理结束就减一,如果已经达到最大值就fallback