Java 使用回退功能的弹性4J断路器

Java 使用回退功能的弹性4J断路器,java,spring-boot,Java,Spring Boot,我的服务必须呼叫另一个服务。但如果该服务关闭,它必须调用同一服务的回退URL。这就像服务部署在两个数据中心一样。如果一切正常,则调用主DC中的一个,如果主DC已关闭,则调用辅助DC中的一个 我正在尝试使用resilience4j中的断路器来实现这一点。 要求如下 主DC中的服务启动->呼叫主服务 主DC中的服务已关闭,辅助DC中的服务已启动->不调用主服务,只调用辅助服务 主DC中的服务已关闭,辅助DC中的服务已关闭->不调用任何服务并返回默认响应 如果服务在最后y秒内出现x%的故障,则可以识别

我的服务必须呼叫另一个服务。但如果该服务关闭,它必须调用同一服务的回退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();