【问题标题】:Keep calling 3rd party until it returns expected response with Hystrix继续调用第 3 方,直到它返回 Hystrix 的预期响应
【发布时间】:2020-04-30 09:17:14
【问题描述】:

我正在寻找一种从我的代码(Spring Boot 应用程序)调用 3rd 方服务的方法,如果它没有响应,我想重复调用 x 次,然后提供默认的回退。我发现了一个示例伪代码,它可能适用于我的 Hystrix

public class ExampleClass {

    @HystrixCommand(fallbackMethod = "example_Fallback")
    public String myMethod() {

        // third party service
        String response = httpClient.execute();

        return "OK";
    }

    private String example_Fallback() {

        return "ERROR HAPPENED";
    }
}

但是,如果它返回意外的正常响应,我还想重复调用相同的第三方服务 x 次。(将该特定响应视为第三方无响应)。这样做的原因是,第三方可能无法为请求提供服务,我只能在响应中进行检查。有人可以指出我正确的方向或提供一个如何使用 Hystrix 解决此问题的示例吗?

【问题讨论】:

    标签: spring spring-boot spring-cloud hystrix


    【解决方案1】:

    ...我想重复调用 x 次,然后提供 默认后备。

    在这里配置circuitBreaker.requestVolumeThreshold 可能会有所帮助。也可以看看其他Hystrix properties

    @HystrixCommand(fallbackMethod = "example_Fallback", commandProperties = {
       @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5"),
       @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "2000")
       }
    )
    public String myMethod() {
      ...
    }
    

    请注意circuitBreaker.requestVolumeThreshold(引用)“...设置滚动窗口中将使电路跳闸的最小请求数”。滚动窗口持续时间 - metrics.rollingStats.timeInMilliseconds - 默认为 10 秒。

    Spring中还有@Retryable注解。

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 2019-06-17
      • 2019-12-20
      • 1970-01-01
      • 2014-09-18
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多