【发布时间】:2020-07-10 21:15:26
【问题描述】:
我在我的项目中使用 Spring Boot2 启动器 (https://resilience4j.readme.io/docs/getting-started-3) 实现了弹性 4j。
我用 @CircuitBreaker 注释了一个方法,该方法使用 http 客户端调用外部服务,并且断路器工作正常 - 包括它的后备。
我想为它添加单元测试,但是当我运行一个测试来模拟回退时,什么都没有发生 - 异常被抛出,但没有被断路器机制处理。
我找到了一些使用其指标的示例,但在我的情况下没有用。
有什么想法吗?
这是我客户的 sn-p:
@CircuitBreaker(name = "MY_CICUIT_BREAKER", fallbackMethod = "fallback")
public ResponseEntity<String> search(String value) {
ResponseEntity<String> responseEntity = restTemplate.exchange(
searchURL,
HttpMethod.GET,
new HttpEntity(new HttpHeaders()),
String.class,
value);
}
public ResponseEntity<String> fallback(String value, ResourceAccessException ex) {
return "fallback executed";
}
【问题讨论】:
-
这个方法怎么叫搜索?
-
只需从服务调用
client.search(value),由控制器调用 -
这就是问题所在。如果您直接调用该服务,那么 spring magic(aspects) 就不会出现在图片中。因此断路器功能不起作用。在正常执行期间,当流从一个文件流向另一个文件(控制器到服务类)时,spring 会拦截调用并做很多事情。Becos 整个事情都有效。如果你直接打电话,那么它不起作用。调用必须从 spring bean 到 spring bean
-
嗯...有道理。然后我将使用集成测试!感谢您的及时支持!
-
@user2541537 你是如何进行这个集成测试的?我遇到了同样的问题,如果你能分享对你有用的东西,你是如何设置集成测试的,等等......谢谢
标签: java spring-boot unit-testing aop resilience4j