继续调用第 3 方,直到它返回 Hystrix 的预期响应

Posted

技术标签:

【中文标题】继续调用第 3 方,直到它返回 Hystrix 的预期响应【英文标题】:Keep calling 3rd party until it returns expected response with 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 解决此问题的示例吗?

【问题讨论】:

【参考方案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注解。

【讨论】:

以上是关于继续调用第 3 方,直到它返回 Hystrix 的预期响应的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Hystrix理解与实践:搭建简单监控集群

如何继续删除第一个值,直到向量的总和小于 20?

分布式架构核心RPC原理

Spring cloud hystrix 服务容错保护

Hystrix

SpringCloud之Hystrix环境搭建