深入学习spring cloud gateway 限流熔断

public static void init() {

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}”);

System.setProperty(“spring.cloud.gateway.routes[0].filters[1].name”, “RequestRateLimiter”);

System.setProperty(“spring.cloud.gateway.routes[0].filters[1].args.redis-rate-limiter.replenishRate”, “10”);

System.setProperty(“spring.cloud.gateway.routes[0].filters[1].args.redis-rate-limiter.burstCapacity”, “20”);

System.setProperty(“spring.redis.host”, “localhost”);

System.setProperty(“spring.redis.port”, “” + redis.getMappedPort(6379));

new MockServerClient(mockServer.getContainerIpAddress(), mockServer.getServerPort())

.when(HttpRequest.request()

.withPath(“/1”))

.respond(response()

.withBody(“{“id”:1,“number”:“1234567890”}”)

.withHeader(“Content-Type”, “application/json”));

}

@Test

@BenchmarkOptions(warmupRounds = 0, concurrency = 6, benchmarkRounds = 600)

public void testAccountService() {

ResponseEntity r = template.exchange(“/account/{id}”, HttpMethod.GET, null, Account.class, 1);

LOGGER.info(“Received: status->{}, payload->{}, remaining->{}”, r.getStatusCodeValue(), r.getBody(), r.getHeaders().get(“X-RateLimit-Remaining”));

// Assert.assertEquals(200, r.getStatusCodeValue());

// Assert.assertNotNull(r.getBody());

// Assert.assertEquals(Integer.valueOf(1), r.getBody().getId());

// Assert.assertEquals(“1234567890”, r.getBody().getNumber());

}

}

执行Test类: 发现超过20之后会被拦截返回429,运行过程中随着令牌的放入会不断有请求成功。

14:20:32.242 — [pool-2-thread-1] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[18]

14:20:32.242 — [pool-2-thread-4] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[16]

14:20:32.242 — [pool-2-thread-2] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[14]

14:20:32.242 — [pool-2-thread-3] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[15]

14:20:32.242 — [pool-2-thread-6] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[17]

14:20:32.242 — [pool-2-thread-5] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[19]

14:20:32.294 — [pool-2-thread-4] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[15]

14:20:32.297 — [pool-2-thread-6] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[19]

14:20:32.304 — [pool-2-thread-3] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[18]

14:20:32.308 — [pool-2-thread-5] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[16]

14:20:32.309 — [pool-2-thread-1] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[17]

14:20:32.312 — [pool-2-thread-2] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[14]

14:20:32.320 — [pool-2-thread-4] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[13]

14:20:32.326 — [pool-2-thread-6] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[12]

14:20:32.356 — [pool-2-thread-4] : Received: status->200, payload->Account(id=1, number=1234567890), remaining->[7]<

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值