RouterConfig.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package com.yaozhitech.spring5.config;
  2. import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
  3. import org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter;
  4. import org.springframework.cloud.gateway.route.RouteLocator;
  5. import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import reactor.core.publisher.Mono;
  9. @Configuration
  10. public class RouterConfig {
  11. @Bean
  12. public RouteLocator customRouteLocator(RouteLocatorBuilder builder, UriConfiguration uriConfiguration) {
  13. String httpUri = uriConfiguration.getHttpbin();
  14. //@formatter:off
  15. return builder.routes()
  16. .route("path_route", r -> r.path("/city_list.do")
  17. .filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter()).setKeyResolver(urlPathKeyResolver())))
  18. .uri(httpUri))
  19. .route("host_route", r -> r.host("*.myhost.org")
  20. .uri("http://httpbin.org"))
  21. .route("rewrite_route", r -> r.path("/city_list")
  22. .filters(f -> f.rewritePath("city_list", // rewritePath方法会使用内建的过滤器重写路径
  23. "city_list.do"))
  24. .uri(httpUri))
  25. // .route("hystrix_fallback_route", r -> r.path("/slow_query.do")
  26. // .filters(f -> f
  27. // .rewritePath("_query.do", "")
  28. // .hystrix(c -> c.setName("slowcmd").setFallbackUri("forward:/hystrixfallback"))
  29. // )
  30. // .uri("http://127.0.0.1:8080"))
  31. .route("circuitbreaker_route", r -> r.path("/slow1_query.do")
  32. .filters(f -> f
  33. .rewritePath("_query.do", "")
  34. .circuitBreaker(c -> c.setName("slow").setFallbackUri("forward:/hystrixfallback"))
  35. )
  36. .uri("http://127.0.0.1:8080"))
  37. // .route("websocket_route", r -> r.path("/echo")
  38. // .uri("ws://localhost:9000"))
  39. .build();
  40. //@formatter:on
  41. }
  42. @Bean
  43. RedisRateLimiter redisRateLimiter() {
  44. return new RedisRateLimiter(1, 1);
  45. }
  46. // 用户限流
  47. KeyResolver userKeyResolver() {
  48. return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user"));
  49. }
  50. // url限流
  51. KeyResolver urlPathKeyResolver() {
  52. return exchange -> Mono.just(exchange.getRequest().getPath().toString());
  53. }
  54. // ip限流
  55. KeyResolver ipKeyResolver() {
  56. return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostString());
  57. }
  58. }