一。动态路由配置是什么?
动态配置路由是通过服务注册名来实现的,路由的配置不再是配置固定的访问端口,可以动态来实现。默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路劲创建动态路由进行转发,从而实现动态路由的功能。
二。实现过程
1.在gateway网关子模块的application.yml配置文件中添加以下配置:
eureka:
client:
serviceUrl:
#服务注册地址
defaultZone: http://localhost:8088/eureka/
instance:
#服务实例名称
instance-id: getway-9527
#是否暴露服务ip地址
prefer-ip-address: true
server:
#运行端口
port: 9527
spring:
application:
#服务注册名称
name: service-getway
cloud:
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
routes:
- id: service-provider-getNumber # 路由的id,没有规定规则但要求唯一,建议配合服务名
#匹配后提供服务的路由地址
# uri: http://localhost:8001
uri: lb://service-provider #匹配后提供服务的路由地址
predicates:
- Path=/provider/getNumber/** # 断言,路径相匹配的进行路由(注意**为通配符)
- id: service-provider-getInfo
# uri: http://localhost:8001
uri: lb://service-provider #匹配后提供服务的路由地址
predicates:
- Path=/provider/getInfo #断言,路径相匹配的进行路由
2.其中,修改细节如下图所示:
3.建立两个服务提供端,服务端口分别为8001,8002,注册服务名为:service-provider ,如下图所示:
4.8001与8002服务控制器代码一致,代码如下:
@RestController
@RequestMapping("provider")
public class ProviderController {
//读取application.yml配置文件属性
@Value("${server.port}")
private String port;
@GetMapping("getNumber/{number}")
public String getNumber(@PathVariable int number){
if(number>=0){
return "输入的数字为正数";
}else{
return "输入的数字为负数";
}
}
@GetMapping("getInfo")
public String getInfo(){
return "这是"+port+"端口在提供服务";
}
}
5.启动各个服务,访问http://localhost:9527/provider/getInfo,不断刷新,出现以下效果:
发现8001与8002服务提供端口轮询
6.访问结构图:
注:
gateway网关的详细实现可以参照我的另外一篇博客:
SpringCloud微服务中gateway网关的使用(一)——(介绍+gateway与zuul的区别+gateway实现的两种方式)