0

我想根据我自己的标准(检查特定响应状态)触发 @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;
            }

        };
}

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

fallback 方法返回一个字符串,告诉用户请求没有返回 200 的状态,因此它正在回退。

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

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

4

0 回答 0