Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring云中Zuul服务器上的回退方法_Java_Spring_Netflix Zuul_Hystrix_Spring Cloud Netflix - Fatal编程技术网

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:线程

但是在查看了hystrix.stream之后,我得到了
propertyValue\u executionIsolationStrategy:“信号量”

  • 通过编写自定义RibbonCommand并重写getFallback(),似乎有一个解决方案的提示,但在查看接口之后,我发现RibbonCommand及其超级接口都没有定义这样的方法
我的API网关服务:

@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.