Hystrix的信号量隔离中信号量是进程所有线程共享的吗?

发布于 2022-09-12 04:43:24 字数 253 浏览 24 评论 0

Hystrix的线程隔离中,信号量隔离中信号量是一个java应用进程所有线程共享的吗?还是也有像线程池那样分开隔离,譬如拥有同一个commandKey属性的请求共享一个信号量?

另外,多个方法上用了@HystrixCommand注解,每个方法都有属性,譬如HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS这种,如果设置的值得不同,而因为这个值又是共享的,那么哪个起作用呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

揪着可爱 2022-09-19 04:43:25

按key来的,对应spring cloud就是一个服务名一个信号量,当前java进程中所有请求该服务的请求,都会先经过信号量。

如果不使用@HystrixCommand,直接集成ribbon,一个服务名就是一个信号量。如果使用了@HystrixCommand,那么会一个@HystrixCommand 对应一个信号量。具体你可以断点 AbstractCommand#getExecutionSemaphore()

携余温的黄昏 2022-09-19 04:43:25

1.根据commandKey 没有设置根据class
2.设置多个时相同下,应该会使用最先执行的设置的值。参考源码AbstractCommand#getExecutionSemaphore()。实际中应该不太会出现不同的策略。?

马蹄踏│碎落叶 2022-09-19 04:43:25

信号量本质就是一个静态Map,结构可以简单理解为Map<String, AtomicInteger>,其中key就是commandKey,每收到一个请求就根据commandKey取出对应的计数器加一,处理结束就减一,如果已经达到最大值就fallback

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文