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