我遇到一个问题,当 hystrix 断路器跳闸时,它不会再次关闭。我已将日志记录转为调试,并且我没有看到它试图允许测试请求通过,在这种情况下,在我看来它永远不会关闭,因为它只有在测试执行成功完成时才应该关闭,表明有问题的服务现在是健康。根据文档,断路器配置默认值应该可以工作,但我似乎无法说出为什么测试请求永远不会被允许通过。
2016-02-18 09:00:38,782 noodle-soup-service application-akka.actor.default-dispatcher-7 ERROR akka.actor.OneForOneStrategy - CallServiceCommand short-circuited and fallback failed.
com.netflix.hystrix.exception.HystrixRuntimeException: CallServiceCommand short-circuited and fallback failed.
at com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:816) ~[com.netflix.hystrix.hystrix-core-1.4.23.jar:1.4.23]
at com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:790) ~[com.netflix.hystrix.hystrix-core-1.4.23.jar:1.4.23]
at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:99) ~[io.reactivex.rxjava-1.1.0.jar:1.1.0]
at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) ~[io.reactivex.rxjava-1.1.0.jar:1.1.0]
...
Caused by: java.lang.RuntimeException: Hystrix circuit short-circuited and is OPEN
at com.netflix.hystrix.AbstractCommand$1.call(AbstractCommand.java:414) ~[com.netflix.hystrix.hystrix-core-1.4.23.jar:1.4.23]
... 38 common frames omitted
Run Code Online (Sandbox Code Playgroud) 我正在使用 spring boot 构建基于云的微服务架构。我们只使用嵌入式容器,它是用于 spring boot 的 tomcat。此外,我们还向 jvm 密钥库添加了证书。
为了使它更简单,我只创建了两个 Spring Boot 应用程序。
1) Spring boot Eureka Server
2) Spring boot Eureka client
两者都具有与上述相同的配置,当我在 https 上启动 Eureka 服务器时,它成功启动而没有任何问题,之后我启动了 Eureka 客户端,运行良好,直到它请求注册到 Eureka 服务器,然后它开始失败。
有趣的是,当我将 Eureka 服务器保持在非安全端口上,即保持在 http 上时,我所有启用 ssl 的 eureka 客户端都可以毫无问题地连接,但我的架构中并不真正需要它,因为我也使用 zuul 作为单个入口点我所有的微服务。
当它是 http 时一切正常,但在启用 https 和 SSL 时它开始失败。
这是我的 Eureka 服务器配置。
eureka.instance.hostname= localhost
eureka.client.registerWithEureka= false
eureka.client.fetchRegistry= false
server.port= 8761
server.ssl.enabled = true
server.ssl.key-store=classpath:ssl.keystore
server.ssl.key-store-password=changeit
and my Eureka Client Configuration.
server.port=8181
spring.application.name=my-client
eureka.instance.hostname=localhost
eureka.instance.securePort = 8181
eureka.instance.securePortEnabled = …Run Code Online (Sandbox Code Playgroud) ssl-certificate spring-boot spring-cloud netflix-eureka spring-cloud-netflix