组团学

测试多种路由规则匹配优先级

阅读 (645168)

1、测试多种路由规则匹配优先级

1.1、编写综合路由规则

spring.application.name=gateway-java-api
server.port=50010
#id:自定义路由ID
spring.cloud.gateway.routes[0].id=weight_route1
#uri:目标服务地址
spring.cloud.gateway.routes[0].uri=http://localhost:50020
#predicates:路由条件。Predicate根据输入参数返回一个布尔值。其包含多种默认方法来将Predicate组合成复杂的路由逻辑
spring.cloud.gateway.routes[0].predicates[0]=Path=/hello
spring.cloud.gateway.routes[0].predicates[1]=Weight=Weight,4
spring.cloud.gateway.routes[0].predicates[2]=Query=name
#id:自定义路由ID
spring.cloud.gateway.routes[1].id=weight_route2
#uri:目标服务地址
spring.cloud.gateway.routes[1].uri=http://localhost:50021
#predicates:路由条件。Predicate根据输入参数返回一个布尔值。其包含多种默认方法来将Predicate组合成复杂的路由逻辑
spring.cloud.gateway.routes[1].predicates[0]=Path=/hello
spring.cloud.gateway.routes[1].predicates[1]=Weight=Weight,6
#id:自定义路由ID
spring.cloud.gateway.routes[2].id=path_route1
#uri:目标服务地址
spring.cloud.gateway.routes[2].uri=http://localhost:50022
#predicates:路由条件。Predicate根据输入参数返回一个布尔值。其包含多种默认方法来将Predicate组合成复杂的路由逻辑
spring.cloud.gateway.routes[2].predicates[0]=Path=/test
#id:自定义路由ID
spring.cloud.gateway.routes[3].id=path_route2
#uri:目标服务地址
spring.cloud.gateway.routes[3].uri=http://localhost:50023
#predicates:路由条件。Predicate根据输入参数返回一个布尔值。其包含多种默认方法来将Predicate组合成复杂的路由逻辑
spring.cloud.gateway.routes[3].predicates[0]=Path=/test

1.2、修改服务提供者代码

@RestController public class HelloController { @Value("${provider.name}") private String name; @GetMapping("/hello") public String hello(@RequestParam(value = "name",required = false) String name){ if (StringUtils.isEmpty(name)){ name=this.name; } return name; } @GetMapping("/hello2") public String hello2(){ return name; } @GetMapping("/test") public String test(){ return name; } }

1.3、启动4个服务提供者

端口号分别是50020,50021,50022,50023

名称分别是provider-1,provider-2,provider-3,provider-4

1.4、测试路由规则匹配情况

1、访问http://localhost:50010/hello?name=liu

1589217185267.png

2、访问http://localhost:50010/hello

1589217271724.png

3、访问http://localhost:50010/test

1589217309840.png

总结:

  • 根据权重匹配:同一组路由的优先级由权重决定

  • 根据路由id值匹配:不同组路由的优先级根据路由ID来计算。优先匹配ID小的路由。即,当一个请求满足多个路由谓词条件时,请求只会被首个成功匹配的路由转发

需要 登录 才可以提问哦