【发布时间】:2015-07-10 01:01:15
【问题描述】:
我注意到 Spring-Cloud ZUUL 将执行隔离强制为 SEMAPHORE 而不是 THREAD 默认值(Netflix 推荐)。
org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand 中的评论说:
我们希望默认为信号量隔离,因为它包含 其他 2 个已经被线程隔离的命令
但我还是不明白 :-( 那另外两个命令是什么?
这样配置,Zuul 只能调度负载,但不允许超时,让客户端走开。简而言之,即使 Hystrix 超时设置为 1000 毫秒,客户端也只会在转发到链下服务的调用返回(或由于 ReadTimeout 导致超时)后才会释放。
我试图通过覆盖配置来强制线程隔离(不幸的是,每个服务,因为默认值是在代码中强制执行的)并且一切似乎都按预期工作。但是,如果没有正确理解其中的含义,我并不热衷于这样做——尤其是代码中的注释以及 Spring Cloud 版本的 Zuul 采用的默认值。
有人可以提供更多信息吗? 谢谢
【问题讨论】:
-
有什么更新吗? RibbonCommand 中的 RestClient.LoadBalancerCommand 创建了 2 个 Observable。是否与此评论相关。我不确定。
-
你好,很抱歉迟到了:) 我很好奇你为什么觉得有必要改变隔离策略?您是否注意到信号量导致的性能瓶颈?正如
org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand中的评论中提到的,超时由它包装的2 个方法处理。我猜其中之一是功能区命令,因此可以通过ribbon.connectTimeout和ribbon.readTimeout设置超时