自定义在Hystrix断路器中触发回退的标准

时间:2018-01-08 22:29:56

标签: microservices spring-cloud spring-cloud-netflix hystrix circuit-breaker

我想根据自己的标准触发@HystrixCommand方法的回退(检查特定的响应状态)。

我的方法基本上充当客户端,在另一个URL中调用服务(此处标记为URL)。

这是我的代码:

@HystrixCommand(fallbackMethod="fallbackPerformOperation")
    public Future<Object> performOperation(String requestString) throws InterruptedException {

        return new AsyncResult<Object>() {

            @Override
            public Object invoke() {
                Client client = null;
                WebResource webResource  = null;
                ClientResponse response =null;
                String results = null; 
                try{
                    client = Client.create();       
                    webResource = client.resource(URL);
                    client.setConnectTimeout(10000);
                    client.setReadTimeout(10000);
                    response = webResource.type("application/xml")
                       .post(ClientResponse.class, requestString);  
                    logger.info("RESPONSE STATUS: " + response.getStatus());
                    if (response.getStatus() != 200) {
                          webResource = null;
                          logger.error(" request failed with the HTTP Status: " + response.getStatus());

                        throw new RuntimeException(" request failed with the HTTP Status: "
                             + response.getStatus());


                    }

                    results = response.getEntity(String.class);

              } finally {
                  client.destroy();
                  webResource = null;
              }
                return results;
            }

        };
}

当响应状态代码不是200,即response.getStatus()!= 200时,会触发回退方法fallbackPerformOperation()

fallback方法返回一个字符串,告诉用户Request没有返回200的状态,因此它会回落。

我想知道是否可以触发回退而不必在performOperation()方法中明确抛出异常。

我可以使用@HystrixProperty吗?我知道人们主要使用它来获取超时和音量阈值但是我可以编写一个自定义@HystrixProperty来检查我的方法中响应状态是否为200?

0 个答案:

没有答案