SpringCloud(12) Gateway配置动态路由
文章目录一、前言二、Gateway配置动态路由开启从注册中心动态创建路由的功能,利用服务名进行路由方式1: 代码中注入`RouteLocator`的Bean方式2: 在yml配置文件中配置`spring.cloud.gateway.routes`属性值三、本文案例demo源码一、前言本文将基于以下环境通过Gateway配置动态路由环境:spring-boot-dependencies 2.3.2.
·
文章目录
一、前言
本文将基于以下环境通过Gateway配置动态路由
环境:
- spring-boot-dependencies 2.3.2.RELEASE
- spring-cloud-dependencies Hoxton.SR8
- spring-cloud-alibaba-dependencies 2.2.3.RELEASE
- spring-cloud-starter-gateway 2.2.5.RELEASE
二、Gateway配置动态路由
开启从注册中心动态创建路由的功能,利用服务名进行路由
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用服务名进行路由
lower-case-service-id: true # 将请求路径上的服务名配置为小写
方式1: 代码中注入RouteLocator
的Bean
@Configuration
public class GatewayRouteLocatorConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
for (String serviceName : GatewayConstant.RPC_SERVICE_NAME_LIST) {
// 配置路由规则 ex: 当访问地址"http://127.0.0.1:1218/web/api/demo/demo/detail"时会自动转发到地址"http://127.0.0.1:1218/demo/web/api/demo/demo/detail"
routes.route(serviceName, r -> r
.path(String.format("/web/api/%s/**", serviceName))
.uri(String.format("lb://%s", serviceName))).build();
}
return routes.build();
}
}
public interface GatewayConstant {
/**
* rpc服务名
*/
List<String> RPC_SERVICE_NAME_LIST = Lists.newArrayList(
"demo",
"system",
"tool"
);
}
方式2: 在yml配置文件中配置spring.cloud.gateway.routes
属性值
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用服务名进行路由
lower-case-service-id: true # 将请求路径上的服务名配置为小写
# 配置动态路由
routes:
- id: nacos-consumer # 唯一路由表示,没有实际作用不重复就好,建议配合服务名
uri: lb://nacos-consumer # 匹配后提供服务的路由地址,lb后跟提供服务的微服务的名,不要写错!!!
predicates:
- Path=/consumer/* # 以`consumer`开头的请求都负载到`nacos-consumer`服务
filters:
- RewritePath=/consumer/(?<segment>.*),/$\{segment} # 重写请求路径,例如 http://127.0.0.1:18090/consumer/hi -> http://127.0.0.1:18080/hi
- id: nacos-provider
uri: lb://nacos-provider
predicates:
- Path=/provider/**
filters:
- RewritePath=/provider/(?<segment>.*),/$\{segment}
# demo服务
- id: demo
uri: lb://demo
predicates:
- Path=/web/api/demo/** # 所有以“/web/api/demo/**”前缀的请求转发到demo服务上 例如 http://127.0.0.1:1218/web/api/demo/demo/detail -> http://127.0.0.1:1218/demo/web/api/demo/demo/detail
tips: 两种方式配置值最终会合并处理
三、本文案例demo源码
https://gitee.com/zhengqingya/small-tools
今日分享语句:
你需要跟自己比的唯一一个人,就是以前的自己。你需要比一个人变得更好,那个人就是此刻的你。
更多推荐
已为社区贡献13条内容
所有评论(0)