我们在二十三、springCloudAlibaba-gateway初始入门 简单的搭建了gateway项目案例,然后配置里是直接写死服务的ip端口的,这样也太不方便了,正常来说肯定是配置注册到nacos的服务名即可,我们来整合下吧
1、gateway引入nacos依赖
<!--服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、配置文件加上nacos配置
server:
port: 8088
spring:
application:
name: api-gateway
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public
#gateway配置
gateway:
#路由规则
routes:
- id: order_route # 路由的唯一标识
uri: lb://order-service #需要转发的地址.lb本地负载均衡策略
#断言规则 用于路由规则的匹配
predicates:
- Path=/order-service/**
#匹配请求http://localhost:8088/order-service/order/add
#过滤器 用于过滤请求
filters:
- StripPrefix=1 #转发之前去掉第一层路径
#http://localhost:8010/order/add
#- id: stock_route
然后路由规则只需要简单修改uri为
lb://order-service
即可,order-service对应的就是订单在nacos注册的服务名。
通过请求测试发现是ok的。
3、约定大于配置的方式(不建议使用)
假如我们的断言Path里面的路径跟服务名一样,那么我们的路由,断言,过滤都可以不用配置,改为如下即可
gateway:
discovery:
locator:
enabled: true #是否自动识别nacos服务
也就是约定大于配置,但是正常这种模式不会用,自由度和阅读性较低!