在前面SpringCloud系列–Gateway(1)服务网关简介中我们介绍了Gateway的一些概念以及Gateway的入门配置,今天我们来看一下SpringCloud Gateway的动态路由实现和Predicate的使用。
1、通过微服务名实现动态路由:
默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。
在SpringCloud系列–Gateway(1)服务网关简介中的入门配置已经介绍了如何集成使用Gateway,这里我们只叙述实现动态路由新增的部分。
2、application.yml
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
#uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
- id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
#uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/payment/lb/** # 断言,路径相匹配的进行路由
eureka:
instance:
hostname: cloud-gateway-service
client: #服务提供者provider注册进eureka服务列表内
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
注意到这里和入门配置中不同的是:
- 新增了:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
作用:
spring.cloud.gateway.discovery.locator.enabled启用了自动根据服务ID建立路由,路由的路径对应会使用大写ID,若想要使用小写ID,可将spring.cloud.gateway.discovery.locator.lowerCaseServiceId设为true;在设置中也开放了gateway端点。必要时,可以使用RouteLocator实现自定义路由的方式。
-
把入门配置中写死的uri: http://localhost:8001换为uri: lb://cloud-payment-service。
需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能; lb://serviceName是spring cloud gateway在微服务中自动为我们创建的负载均衡uri。
此时启动服务后便可进行测试:
访问http://localhost:9527/payment/lb,可看到8001/8002两个端口切换
Happy Learning ~