从服务方法调用 servlet 时,Spring Boot 2 不会触发 resilience4j 的@CircuitBreaker

问题描述 投票:0回答:0

我正在尝试在 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。 这个问题有什么解决办法吗?

spring spring-boot httpclient java-11 resilience4j
© www.soinside.com 2019 - 2024. All rights reserved.