Ber*_*art 11 spring-cloud netflix-zuul
我注意到Spring-Cloud ZUUL强制执行隔离到SEMAPHORE而不是THREAD默认值(根据Netflix的推荐).
评论org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand说:
我们希望默认为信号量隔离,因为这包含了另外两个已经线程隔离的命令
但我仍然没有得到它:-(那两个其他命令是什么?
以这种方式配置,Zuul只能调整加载但不允许超时并让客户端离开.简而言之,即使Hystrix超时设置为1000毫秒,只有在转发到链中的服务的调用返回时(或者由于例如ReadTimeout而超时),才会释放客户端.
我试图通过覆盖配置强制THREAD隔离(不幸的是,每个服务,因为在代码中强制默认),一切似乎按预期工作.但是,如果没有正确理解其含义,我并不热衷于这样做 - 当然关于代码中的注释以及Spring的Zuul版本采用的默认值.
有人可以提供更多信息吗?谢谢
Hystrix 文档有一个很好的例子,说明了为什么在包装线程隔离的命令时信号量隔离是合适的。具体来说,它说:
\n\n\n\n\nfa\xc3\xa7ade HystrixCommand 可以使用信号量隔离,因为它所做的所有工作都是通过其他两个已经线程隔离的 HystrixCommand。只要 fa\xc3\xa7ade 的 run() 方法不执行任何其他网络调用、重试逻辑或其他容易出错的 \xe2\x80\x9cerror \xe2\x80\ ,就没有必要再有一层线程x9d的东西。
\n
更新:问题提到必须为每个服务配置线程隔离,但我发现您可以通过设置以下属性来控制所有 Hystrix 命令(包括 RibbonCommands)的隔离:
\n\nhystrix.command.default.execution.isolation.strategy = THREAD\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5916 次 |
| 最近记录: |