我正在尝试在 Spring Boot 2 应用程序中实施 resilience4j。
当我在 Controller 类上实现时,它工作正常。
但是当我在内部/服务方法中实现并尝试触发@CircuitBreaker 时,它根本不起作用。
@CircuitBreaker(name =SOME_SERVICE,fallbackMethod = "getStubResponse")
public String getResponse(String xml) {
String result ;
HttpPost post = new HttpPost(some_url);
post.setHeader("Accept", "text/xml");
post.setHeader("Content-type", "text/xml");
HttpEntity entity = null;
try {
entity = new ByteArrayEntity(xml.getBytes("UTF-8"));
post.setEntity(entity);
} catch (UnsupportedEncodingException e) {
throw new SomeException("UnsupportedEncodingException occured in SomeCall "+e);
}
try (CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(post)) {
result = EntityUtils.toString(response.getEntity());
} catch (IOException io) {
log.logError("OhubCall", "getResponseError", io.getMessage());
throw new ArticlesException("IO Exception Occured in Call "+io);
}
return result;
}
@CircuitBreaker(name =SOME_SERVICE,fallbackMethod = "getStubResponse")
public String getResponse2(String xml) {
String some_url = "some_servlet_url"
WebClient client = WebClient.create();
return client
.post()
.uri(some_url)
.body(BodyInserters.fromValue(xml))
.exchange()
.flatMap(response -> response.bodyToMono(String.class))
.block();
}
我正在尝试在应用程序/服务类调用 servlet 时实现@CircuitBreaker。 我还尝试从同一个内部服务类实现 @CircuitBreaker 并调用另一个 Rest 模板调用(另一个示例 Spring Boot 应用程序)并且它正常工作。 所以问题似乎出在 HttpClient 和 WebClient 上。 两者都没有触发@CircuitBreaker。 这个问题有什么解决办法吗?