Java Spring云中Zuul服务器上的回退方法
我是春天云网飞的新手,对此有一些问题。Java Spring云中Zuul服务器上的回退方法,java,spring,netflix-zuul,hystrix,spring-cloud-netflix,Java,Spring,Netflix Zuul,Hystrix,Spring Cloud Netflix,我是春天云网飞的新手,对此有一些问题。 我正在使用API网关和在Zuul edge server上运行的Hystrix,我想确定我是否正确理解以下行为: 我杀死了一个运行在API网关后面的微服务,然后我强迫hystrix打开电路。在那之后(大约10秒),我向未运行的微服务发送一个请求,并接收超时错误。但是,当我在很短的时间内(最多1秒)发送许多(数十个)请求时,我会收到短路打开错误。 我很惊讶为什么我收到超时错误,虽然电路是开放的,因此hystrix应该来玩,以避免此类故障。但我猜原因是,如果自
我正在使用API网关和在Zuul edge server上运行的Hystrix,我想确定我是否正确理解以下行为: 我杀死了一个运行在API网关后面的微服务,然后我强迫hystrix打开电路。在那之后(大约10秒),我向未运行的微服务发送一个请求,并接收超时错误。但是,当我在很短的时间内(最多1秒)发送许多(数十个)请求时,我会收到短路打开错误。
我很惊讶为什么我收到超时错误,虽然电路是开放的,因此hystrix应该来玩,以避免此类故障。但我猜原因是,如果自上次请求后的时间>Circuit Breaker.SleepWindowIn毫秒,那么API网关将再次尝试连接到微服务,以检查它是否处于活动状态,但它不是,因此->超时。这也解释了为什么我在短时间内收到许多请求的短路打开错误 接下来,当我收到“超时”或“短路”错误时,我得到:
HystrixRuntimeException: Microservice (timed-out | short-circuited) and no fallback available
如何在zuul服务器上指定回退(对于所有路由都可以相同)以避免此异常?到目前为止,我一直在尝试:
- 根据这一点,我将执行隔离策略设置为线程 要避免超时,请执行以下操作: 希斯特里克斯: command.default.execution.isolation.strategy:线程
propertyValue\u executionIsolationStrategy:“信号量”
- 通过编写自定义RibbonCommand并重写getFallback(),似乎有一个解决方案的提示,但在查看接口之后,我发现RibbonCommand及其超级接口都没有定义这样的方法
@SpringBootApplication
@EnableSidecar // This annotation includes @EnableCircuitBreaker, @EnableDiscoveryClient, and @EnableZuulProxy
@EnableHystrixDashboard
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
application.yml
server:
port: 10000
sidecar:
port: 8000
endpoints:
restart:
enabled: true
shutdown:
enabled: true
health:
sensitive: false
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
microservice:
path: /microservice/**
hystrix:
command.default.execution.isolation.strategy: THREAD
debug: true
最新版本支持Zuul级别的回退。这是通过扩展ZuulFallbackProvider完成的。请访问以下链接以获取示例: 对于某些类型的路由配置(例如,如果您有基于url的配置),回退触发本身不会完成
“这些简单的url路由不会作为HystrixCommand执行,也无法使用Ribbon对多个url进行负载平衡。“你应该考虑把一个版本号用来帮助用户找到正确的版本/版本来解决他们的问题。在官方的Spring文档中我错过了很多东西。无法找出失败的url路由为什么没有调用我的回退方法+1.