这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
本系列代码地址:github.com/JoJoTec/spr…
上一节我们通过单元测试验证了线程隔离的正确性,这一节我们来验证我们断路器的正确性,主要包括:
- 验证配置正确加载:即我们在 Spring 配置(例如
application.yml
)中的加入的 Resilience4j 的配置被正确加载应用了。 - 验证断路器是基于服务和方法打开的,也就是某个微服务的某个方法断路器打开但是不会影响这个微服务的其他方法调用
验证配置正确加载
与之前验证重试类似,我们可以定义不同的 FeignClient,之后检查 resilience4j 加载的断路器配置来验证线程隔离配置的正确加载。
并且,与重试配置不同的是,通过系列前面的源码分析,我们知道 spring-cloud-openfeign 的 FeignClient 其实是懒加载的。所以我们实现的断路器也是懒加载的,需要先调用,之后才会初始化断路器。所以这里我们需要先进行调用之后,再验证断路器配置。
首先定义两个 FeignClient,微服务分别是 testService1 和 testService2,contextId 分别是 testService1Client 和 testService2Client
1 | less复制代码@FeignClient(name = "testService1", contextId = "testService1Client") |
然后,我们增加 Spring 配置,并且给两个微服务都添加一个实例,使用 SpringExtension 编写单元测试类:
1 | less复制代码//SpringExtension也包含了 Mockito 相关的 Extension,所以 @Mock 等注解也生效了 |
编写测试代码,验证配置正确:
1 | scss复制代码@Test |
验证断路器是基于服务和方法打开的。
我们给 TestService1Client 添加一个方法:
1 | less复制代码@GetMapping("/status/500") |
这个方法一定会调用失败,从而导致断路器打开。经过 2 次失败以上后(因为配置最少触发断路器打开的请求个数为 2),验证断路器状态:
1 | scss复制代码@Test |
这样,我们就成功验证了,验证断路器是基于服务和方法打开的。
微信搜索“我的编程喵”关注公众号,每日一刷,轻松提升技术,斩获各种offer:
本文转载自: 掘金