Java 使用回退功能的弹性4J断路器
我的服务必须呼叫另一个服务。但如果该服务关闭,它必须调用同一服务的回退URL。这就像服务部署在两个数据中心一样。如果一切正常,则调用主DC中的一个,如果主DC已关闭,则调用辅助DC中的一个 我正在尝试使用resilience4j中的断路器来实现这一点。 要求如下Java 使用回退功能的弹性4J断路器,java,spring-boot,Java,Spring Boot,我的服务必须呼叫另一个服务。但如果该服务关闭,它必须调用同一服务的回退URL。这就像服务部署在两个数据中心一样。如果一切正常,则调用主DC中的一个,如果主DC已关闭,则调用辅助DC中的一个 我正在尝试使用resilience4j中的断路器来实现这一点。 要求如下 主DC中的服务启动->呼叫主服务 主DC中的服务已关闭,辅助DC中的服务已启动->不调用主服务,只调用辅助服务 主DC中的服务已关闭,辅助DC中的服务已关闭->不调用任何服务并返回默认响应 如果服务在最后y秒内出现x%的故障,则可以识别
你能帮我怎么做吗?我正在应用程序中使用Resilience4j和spring boot 您可以使用为提供的支持
您可以使用为提供的支持
这将始终调用service1。我不希望service1在一段时间内出现故障时被调用。我相应地编辑了我的答案。@warrior107您还需要什么吗?是的,但是您只能在第一次
Try
时应用断路器,因此后续的recover
故障不会被断路器保护,如果您希望,您将需要再次装饰断路器,请尝试使用断路器。理想情况下是的,因为只有在断路器断开时它才会进入第一次恢复(我们仅在CallNotPermittedException上恢复),因此如果您再次使用相同的断路器,它已经断开,实际上不会发生恢复。这将始终调用service1。我不希望service1在一段时间内出现故障时被调用。我相应地编辑了我的答案。@warrior107您还需要什么吗?是的,但是您只能在第一次Try
时应用断路器,因此后续的recover
故障不会被断路器保护,如果您希望,您将需要再次装饰断路器,请尝试使用断路器。理想情况下是的,因为只有在断路器断开时它才会进入第一次恢复(我们仅在CallNotPermittedException上恢复),因此,如果您再次使用相同的断路器,它已经断开,实际上不会发生恢复。
circuitBreaker
.decorateTrySupplier(() -> Try.ofSupplier(() -> "Call Service 1."))
.get()
.recover(CallNotPermittedException.class, exception -> "Call Service 2")
.get();