前言
Spring Cloud Gateway 通过集成 Nacos 服务发现,可以动态获取注册到 Nacos 的微服务实例信息,并根据服务名(Service Name)自动生成路由规则或手动配置路由规则,实现请求的动态路由和负载均衡。
一个最简单的网关就是实现所有微服务的代理即可,但是生产环境通常需要服务鉴权限制访问等,这里先简单示例一个没有鉴权,可以访问所有微服务接口的网关
创建项目
创建一个springboot项目
注意:避免引入 spring-boot-starter-web
,因 Gateway 基于 WebFlux 非阻塞模型
添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC2</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0-RC2</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>4.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>4.0.5</version>
</dependency>
修改配置
application.yml
server:
port: 8080
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 服务注册地址
namespace: local # 命名空间(默认 public,我这里改为了local)
group: DEFAULT_GROUP # 分组
gateway:
discovery:
locator:
enabled: true # 自动根据服务名生成路由(重要!)
lower-case-service-id: true
启动和调用
成功访问到微服务的接口调用成功
手工配置路由
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # ??????
namespace: local # ??????? public?
group: DEFAULT_GROUP # ??
gateway:
discovery:
locator:
enabled: true # ????????????????
lower-case-service-id: true
routes:
- id: hello_route # 路由唯一标识
uri: http://localhost:8081 # 目标服务地址
predicates:
- Path=/hello/** # 路径匹配规则
访问配置的路由
总结
这里只是个简单的调用,主要目的是走通微服务调用的流程,后续会不断完善权限配置等