请求日志如下:当请求达到100次时候,此时失败率为50% 这时候系统开启断路器返回503!
20:07:29.281 --- [pool-2-thread-1] : 91. Received: status->200, payload->Account(id=1, number=1234567890), call->120:07:30.297 --- [pool-2-thread-1] : 92. Received: status->504, payload->Account(id=null, number=null), call->220:07:30.316 --- [pool-2-thread-1] : 93. Received: status->200, payload->Account(id=1, number=1234567890), call->120:07:31.328 --- [pool-2-thread-1] : 94. Received: status->504, payload->Account(id=null, number=null), call->220:07:31.345 --- [pool-2-thread-1] : 95. Received: status->200, payload->Account(id=1, number=1234567890), call->120:07:32.359 --- [pool-2-thread-1] : 96. Received: status->504, payload->Account(id=null, number=null), call->220:07:32.385 --- [pool-2-thread-1] : 97. Received: status->200, payload->Account(id=1, number=1234567890), call->120:07:33.400 --- [pool-2-thread-1] : 98. Received: status->504, payload->Account(id=null, number=null), call->220:07:33.414 --- [pool-2-thread-1] : 99. Received: status->200, payload->Account(id=1, number=1234567890), call->120:07:34.509 --- [pool-2-thread-1] : 100. Received: status->504, payload->Account(id=null, number=null), call->220:07:34.525 --- [pool-2-thread-1] : 101. Received: status->503, payload->Account(id=null, number=null), call->120:07:34.533 --- [pool-2-thread-1] : 102. Received: status->503, payload->Account(id=null, number=null), call->220:07:34.539 --- [pool-2-thread-1] : 103. Received: status->503, payload->Account(id=null, number=null), call->120:07:34.545 --- [pool-2-thread-1] : 104. Received: status->503, payload->Account(id=null, number=null), call->220:07:34.552 --- [pool-2-thread-1] : 105. Received: status->503, payload->Account(id=null, number=null), call->120:07:34.566 --- [pool-2-thread-1] : 106. Received: status->503, payload->Account(id=null, number=null), call->220:07:34.572 --- [pool-2-thread-1] : 107. Received: status->503, payload->Account(id=null, number=null), call->120:07:34.576 --- [pool-2-thread-1] : 108. Received: status->503, payload->Account(id=null, number=null), call->220:07:34.580 --- [pool-2-thread-1] : 109. Received: status->503, payload->Account(id=null, number=null), call->120:07:34.586 --- [pool-2-thread-1] : 110. Received: status->503, payload->Account(id=null, number=null), call->220:07:34.591 --- [pool-2-thread-1] : 111. Received: status->503, payload->Account(id=null, number=null), call->1
这时候我们修改下配置
@BeforeClasspublic static void init() {System.setProperty("logging.level.org.springframework.cloud.gateway.filter.factory", "TRACE");System.setProperty("spring.cloud.gateway.routes[0].id", "account-service");System.setProperty("spring.cloud.gateway.routes[0].uri", "http://localhost:" + mockServer.getServerPort());System.setProperty("spring.cloud.gateway.routes[0].predicates[0]", "Path=/account/**");System.setProperty("spring.cloud.gateway.routes[0].filters[0]", "RewritePath=/account/(?<path>.*), /$\{path}");System.setProperty("spring.cloud.gateway.routes[0].filters[1].name", "CircuitBreaker");System.setProperty("spring.cloud.gateway.routes[0].filters[1].args.name", "exampleSlowCircuitBreaker");//System.setProperty("spring.cloud.gateway.routes[0].filters[1].args.slowCallDurationThreshold", "100");//System.setProperty("spring.cloud.gateway.routes[0].filters[1].args.slowCallRateThreshold", "9.0F");System.setProperty("spring.cloud.gateway.routes[0].filters[1].args.fallbackUri", "forward:/fallback/account");MockServerClient client = new MockServerClient(mockServer.getContainerIpAddress(), mockServer.getServerPort());client.when(HttpRequest.request().withPath("/1")).respond(response().withBody("{"id":1,"number":"1234567890"}").withHeader("Content-Type", "application/json"));client.when(HttpRequest.request().withPath("/2"), Times.exactly(3)).respond(response().withBody("{"id":2,"number":"1"}").withDelay(TimeUnit.SECONDS, 1000).withHeader("Content-Type", "application/json"));client.when(HttpRequest.request().withPath("/2")).respond(response().withBody("{"id":2,"number":"1234567891"}")//.withDelay(TimeUnit.SECONDS, 200).withHeader("Content-Type", "application/json"));}
新建一个回调接口,用于断路器打开后请求的地址 。
@RestController@RequestMapping("/fallback")public class GatewayFallback {@GetMapping("/account")public Account getAccount() {Account a = new Account();a.setId(2);a.setNumber("123456");return a;}}
推荐阅读
- MySQL高级进阶:关于InnoDB存储结构,一文深入分析讲解
- 什么是搜索引擎营销?
- 程序员标配Springboot!终于有人把SpringBoot讲的通俗易懂了
- 还搞不清Spring 与 Spring MVC 容器之间的关系?
- SpringBoot事件监听:应用监听接口的使用
- SpringCloud Zookeeper配置中心详解
- 微信正在用的深度学习框架开源!支持稀疏张量,基于C++开发
- 幼儿也可以学习打太极?要注意什么
- 学习|119岁全球最长寿老人去世:生前最爱喝碳酸饮料 吃巧克力
- 比较出名的奶茶牌子,贵阳学习奶茶技术怎么样