开发过程中使用了Spring Cloud Gateway来进行对各个服务的请求转发。
spring:
application:
name: boss-bes-gateway
redis:
host: localhost
password: test123
port: 6379
main:
allow-bean-definition-overriding: true
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
# 用户与权限管理
- id: boss-bes-user-permission-center
uri: http://localhost:10015/
predicates:
- Path=/boss-bes-user-permission-center/api/**
filters:
- StripPrefix=1
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/fallback
以该yml中用户权限管理为例:
在没有用网关进行转发之前,请求的地址形式:
localhost:10015/api/**
设置网关以后的请求的地址形式
localhost:10003/boss-bes-user-permission-center/api/**
指定了uri(localhost:10015,要指向的地址)
对predicates指定了path(网关表现的地址)
filter配置StripPrefix=1的意思:把path的前1个路径截掉(/boss-bes-user-permission-center):
处理过后
前段发送以下请求:
localhost:10003/boss-bes-user-permission-center/api/**
网关:
1. 接收到/boss-bes-user-permission-center/api/**
2. 根据StripPrefix=1,截掉/boss-bes-user-permission-center,剩下api/**
3. 拼上uri=localhost:10015,得到localhost:10015/api/**,发送到后端。