Gateway 整合 Nacos

上章 “Gateway 搭建网关服务” 中,我们的 Gateway 网关路由配置中使用了写死的 uri 地址,如下:

spring:
 application:
   # 服务名称
   name: gateway-demo01
   # 网关路由配置
   gateway:
     # 网关路由配置
     routes:
       # 路由id,自定义,只要唯一集合
       - id: service-order
         # 路由的目标地址
         uri: http://localhost:8081
         # 路由断言,也就是判断请求是否符合路由规则的条件
         predicates:
           # 按照路径匹配,只要以 /order/ 开头就符合要求
           - Path=/order/**

在实际生产环境中,不推荐将路由的 uri 地址写死。而且,将地址写死将会存在一些问题?如果相同服务存在多个实例,那么如何填写路由地址 uri 呢。

此时,我们可以引入 Nacos 的服务注册功能,并且实现负载均衡功能。Spring Cloud Gateway 自带负载均衡功能,它可以与服务注册中心(如 Eureka、Consul 等)集成,从而能够动态地发现服务实例并进行负载均衡。

Nacos 依赖

在 pom.xml 中引入 Nacos 服务注册依赖,如下:

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

修改 Gateway 配置

改造上章节的配置文件,将绝对地址 http://localhost:8081 修改为 lb://service-order 地址,该地址表示开启了负载均衡(lb),并且通过服务名 service-order 到服务注册中心查找服务实例列表,然后通过负载均衡算法选择一个合适的实例进行调用。

配置如下:

server:
 # 网关端口
 port: 9000

spring:
 application:
   # 服务名称
   name: gateway-demo01
 cloud:
   # nacos
   nacos:
     discovery:
       server-addr: localhost:8848
       username: nacos
       password: nacos
       group: DEFAULT_GROUP

   # 网关路由配置
   gateway:
     # 网关路由配置
     routes:
       # 路由id,自定义,只要唯一集合
       - id: service-order
         # 路由的目标地址,lb 就是负载均衡,后面跟服务名
         # 需要集成 nacos 等服务注册中心
         uri: lb://service-order
         # 路由断言,也就是判断请求是否符合路由规则的条件
         predicates:
           # 按照路径匹配,只要以 /order/ 开头就符合要求
           - Path=/order/**

注意:lb 表示负载均衡,全称 load balance。

启动&验证

启动网关服务,访问 nacos 查看服务信息,如下图:

Gateway 整合 Nacos

然后,通过浏览器访问 http://localhost:9000/order/1 地址,Gateway 网关将该地址路由到 http://localhost:8081/order/1 地址,响应内容如下:

{
   "id": 1,
   "title": "海尔冰箱335升 法式多门四开门冰箱 一级能效 风冷无霜 双变频省电 节能净味 家用大容量超薄变温 多门推荐 BCD-335WLHFD9DS9",
   "num": 1,
   "price": 2598,
   "userId": 1,
   "user": {
       "id": 1,
       "name": "张珊",
       "age": 27,
       "email": "zhangs@gmail.com"
   }
}
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号