ToB企服应用市场:ToB评测及商务社交产业平台

标题: 线上debug&gateway自界说路由规则 [打印本页]

作者: 天津储鑫盛钢材现货供应商    时间: 2024-10-22 15:41
标题: 线上debug&gateway自界说路由规则
1.配置remote debug

1.在启动参数配置参数:
  1. -Xdebug
  2. -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6364
复制代码
2.新建remote

3.启动remote
2.gateway改造

我个人的需求是把某个用户的请求,打到我想要的节点(开启了debug模式的节点),克制因为集群节点的负载导致请求打到其他节点,也克制影响其他用户的正常请求流程。
我的做法是拦截请求投中的Authorization=xxx举行判断,因此参考了gateway的路由战略:gateway 路由匹配战略
而gateway自带的路由战略是通过regix(正则匹配)来实现的,因此我做了以下改造:
1.新增HeaderValueRoutePredicateFactory
  1. public class HeaderValueRoutePredicateFactory extends AbstractRoutePredicateFactory<HeaderValueRoutePredicateFactory.Config> {
  2.     private static final String KEY_1 = "headerName";
  3.     private static final String KEY_2 = "headerValue";
  4.     public HeaderValueRoutePredicateFactory() {
  5.         super(Config.class);
  6.     }
  7.     @Override
  8.     public List<String> shortcutFieldOrder() {
  9.         return Arrays.asList(KEY_1, KEY_2);
  10.     }
  11.     @Override
  12.     public Predicate<ServerWebExchange> apply(Config config) {
  13.         return new GatewayPredicate() {
  14.             @Override
  15.             public boolean test(ServerWebExchange exchange) {
  16.                 List<String> values = exchange.getRequest().getHeaders().getOrDefault(config.getHeaderName(),
  17.                         Collections.emptyList());
  18.                 if (values.isEmpty()) {
  19.                     return false;
  20.                 }
  21.                 boolean match = values.stream().allMatch(item -> item.equals(config.getHeaderValue()));
  22.                 if (match) {
  23.                     log.info("debug模式route策略已触发");
  24.                 }
  25.                 return match;
  26.             }
  27.             @Override
  28.             public Object getConfig() {
  29.                 return config;
  30.             }
  31.             @Override
  32.             public String toString() {
  33.                 return String.format("HeaderName: %s headerValue=%s", config.getHeaderName(), config.getHeaderValue());
  34.             }
  35.         };
  36.     }
  37.     public static class Config {
  38.         private String headerName;
  39.         private String headerValue;
  40.         public String getHeaderName() {
  41.             return headerName;
  42.         }
  43.         public Config setHeaderName(String headerName) {
  44.             this.headerName = headerName;
  45.             return this;
  46.         }
  47.         public String getHeaderValue() {
  48.             return headerValue;
  49.         }
  50.         public Config setHeaderValue(String headerValue) {
  51.             this.headerValue = headerValue;
  52.             return this;
  53.         }
  54.     }
  55. }
复制代码
代码笔记:
2.配置类
  1. @Configuration
  2. public class Config {
  3.     @Bean
  4.     public HeaderValueRoutePredicateFactory headerValueRoutePredicateFactory() {
  5.         return new HeaderValueRoutePredicateFactory();
  6.     }
  7. }
复制代码
3.修改gateway配置
  1. spring:
  2.   cloud:
  3.     gateway:
  4.       routes:
  5.         # 当请求头中带有Authorization=ff4a4ce5-5276-4263-b817-34d1ce553421切路径为/ims/**会被该规则路由
  6.         - id: ims
  7.           uri: lb://ims
  8.           predicates:
  9.             - Path=/ims/**
  10.           filters:
  11.             - StripPrefix=1
  12.         # 当请求头中带有Authorization=ff4a4ce5-5276-4263-b817-34d1ce553421切路径为/ims/**会被该规则路由
  13.         - id: ims-debug
  14.           uri: lb://ims-debug
  15.           # 配置-1是为了让该路由策略在id: ims 前面进行判断,否则会触发id=ims的路由策略,不会触发id=ims-debug的路由策略
  16.           order: -1
  17.           predicates:
  18.             - Path=/ims/**
  19.             - HeaderValue=Authorization,ff4a4ce5-5276-4263-b817-34d1ce553421
  20.           filters:
  21.             - StripPrefix=1
复制代码
3.nacos配置

1.正常的节点配置
  1. -Dspring.application.name=ims
复制代码
2.debug的节点配置
  1. -Dspring.application.name=ims-debug
复制代码
本质上ims和ims-debug是同一服务,只是服务名不同,区分开是为了方便路由
4.其他题目


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4