Spring Cloud Gateway 组件的核心是通过一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。
核心配置- route:由id、uri、predicate、filters组成
- predicate:即断言,匹配路由的部件,支持正则表达式
- filters:过滤器,在断言匹配后执行,对路由信息进行操作,也可以操作header、参数等
注意:由于gateway默认依赖webflux,所以不需要加入springboot-web的依赖,否则会报错;
同时,本次实验使用的是Zookeeper作为注册中心,所以不需要加入eureka-client的依赖,否则启动报错
2. ymlorg.springframework.cloud spring-cloud-starter-gateway org.springframework.cloud spring-cloud-starter-zookeeper-discovery org.apache.zookeeper zookeeper org.springframework.cloud spring-cloud-starter-zookeeper-config
server: port: 9527 spring: profiles: active: application: name: springcloud-gateway cloud: gateway: routes: - id: devilvan-route-strip uri: lb://devilvan-caches/caches predicates: # 匹配满足条件的路由 - Path=/caches/cachesController PathRoutePredicateFactory pathRoutePredicateFactory = new PathRoutePredicateFactory(); PathRoutePredicateFactory.Config pathRouteConfig = pathRoutePredicateFactory.newConfig(); ListStripPrefixFilterFactory核心代码 PrefixPathGatewayFilterFactorypattern4StripPrefix = new ArrayList<>(); pattern4StripPrefix.add("/caches/cachesController StripPrefixGatewayFilterFactory stripPrefixGatewayFilterFactory = new StripPrefixGatewayFilterFactory(); StripPrefixGatewayFilterFactory.Config stripConfig = stripPrefixGatewayFilterFactory.newConfig(); stripConfig.setParts(1); stripPrefixGatewayFilterFactory.apply(stripConfig); predicateSpec.predicate(pathRoutePredicateFactory.apply(pathRouteConfig)) .filters(new Function () { @Override public UriSpec apply(GatewayFilterSpec gatewayFilterSpec) { return gatewayFilterSpec.filter(stripPrefixGatewayFilterFactory.apply(stripConfig)); } }); return predicateSpec.uri("lb://devilvan-caches/caches"); } }) .route("devilvan-route-prefix", new Function () { @Override public Route.AsyncBuilder apply(PredicateSpec predicateSpec) { PathRoutePredicateFactory pathRoutePredicateFactory = new PathRoutePredicateFactory(); PathRoutePredicateFactory.Config pathRouteConfig = pathRoutePredicateFactory.newConfig(); List pattern4PrefixPath = new ArrayList<>(); pattern4PrefixPath.add("/**"); pathRouteConfig.setPatterns(pattern4PrefixPath); // filters PrefixPathGatewayFilterFactory prefixPathGatewayFilterFactory = new PrefixPathGatewayFilterFactory(); PrefixPathGatewayFilterFactory.Config prefixPathConfig = prefixPathGatewayFilterFactory.newConfig(); prefixPathConfig.setPrefix("/cachesController"); // 组装predicate和filter predicateSpec.predicate(pathRoutePredicateFactory.apply(pathRouteConfig)) .filters(new Function () { @Override public UriSpec apply(GatewayFilterSpec gatewayFilterSpec) { return gatewayFilterSpec.filter(prefixPathGatewayFilterFactory.apply(prefixPathConfig)); } }); return predicateSpec.uri("lb://devilvan-caches/caches"); } }) .build(); } }



