@Configuration public class ConsumerConfigurations {@Bean public RouteLocator routeLocator2(RouteLocatorBuilder routeLocatorBuilder) { return routeLocatorBuilder.routes() //权重路由配置 .route("weight-route3",fn-> fn.weight("weight-test-group",10).and().path("/testWeight").filters(filter-> filter.rewritePath("/testWeight","/weightTest/v1")).uri("http://localhost:9093")) .route("weight-route4",fn-> fn.weight("weight-test-group",90).and().path("/testWeight").filters(filter-> filter.rewritePath("/testWeight","/weightTest/v2")).uri("http://localhost:9093")).build(); }}
我本地的gateway服务的端口为9102,当访问http://localhost:9102/testWeight的时候会将testWeight替换为/weightTest/v1或者/weightTest/v1,然后就会路由到http://localhost:9093/weightTest/v1或者http://localhost:9093/weightTest/v2
其他的断言部分和过滤器部分也都可以通过配置类的方式去实现。spring提供的断言工厂类和过滤器工厂类都在
org.springframework.cloud.gateway.handler.predicate 和 org.springframework.cloud.gateway.filter包里面,而且都已经实例化。
注意:uri里面配置的路径只会使用host部分,即使uri部分为http://localhost:9093/test也只会使用http://localhost:9093部分。