Gateway 有 3 大核心概念
true
则匹配该路由;Spring
框架中 GatewayFilter
的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。所以我们在配置的时候一定要配置 路由 和 断言 。
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:8001 #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
uri: http://localhost:8001
predicates:
- Path=/payment/lb/** #断言,路径相匹配的进行路由
eureka:
instance:
hostname: cloud-gateway-service
client:
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
uri
的协议为 lb
,表示启用 Gateway
的负载均衡功能。
这样当我们访问 http://localhost:8001/payment/get/1
时其实和 http://localhost:9527/payment/get/1
是一样的,因为访问 9527 他会匹配路由然后转发到指定的地址。
相当于不暴露 8001 号端口,在 8001 外面套了一层 9527。
但是这样和我们的微服务调用关系不大,所以我们可以配置动态路由。
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/** #断言,路径相匹配的进行路由
如上所示,我们先是在配置文件中开启了 discovery-locator
,他表示开启从注册中心动态创建路由的功能。
然后在 URI 处使用的微服务名 lb://cloud-payment-service
,这样就能自动的进行转发,实现负载均衡。