(四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
目录
前言
准备
项目集成
pom.xml引入依赖
启动类
yml文件添加网关配置
修改消费者FeignService类
结果验证
前言
Spring cloud alibaba 体系中构建微服务,我们使用Spring Cloud Gateway 作为服务网关, Gateway是Spring 官方推出的一款基于 WebFlux 的高性能、轻量级网关框架,支持动态路由、限流熔断、过滤器链等功能,且与 Spring 生态深度集成,易于上手并具有广泛的社区支持 。
Tips!
为什么不使用阿里系的网关 Higress ,而是选择spring cloud gateway?
Alibaba 没有重复造轮子去开发一个类似 Gateway 的通用网关,而是专注于更前沿的 云原生场景,打造了 Higress。Higress 针对 Kubernetes 场景进行了深度优化,支持 Istio、服务网格等技术,是为云原生时代的分布式服务架构量身定制的网关解决方案。Spring Cloud Gateway 已经是一个非常成熟和高效的网关解决方案,能够满足大多数微服务场景的需求,与Spring 生态的深度整合,适配性和易用性都非常优秀。因此,在传统的 Spring 微服务体系中,使用 Gateway 已经足够。
这种明确的分工让两者在各自的场景中都发挥了最大优势,而不是功能上的重复建设。在spring cloud alibaba 的官方github试例代码中也是使用的Gateway。
准备
- jdk17+
- maven3.9.4+
- idea2023
- spring cloud: 2023.0.1.0
- spring cloud alibaba: 2023.0.1
源码获取:GitHub - RemainderTime/spring-cloud-alibaba-base-demo: 基于spring cloud alibaba生态快速构建微服务脚手架
项目集成
创建一个网关服务:cloud-gateway
那么目前有三个服务项目:
pom.xml引入依赖
在网关服务gateway中引入依赖
<!-- API网关 gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Spring Boot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 负载均衡 loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
启动类
启动类上依然加上注解@EnableDiscoveryClient作为一个服务注册到nacos中
yml文件添加网关配置
server:
port: 9090
spring:
application:
name: cloud-gateway # 网关服务的名称
cloud:
gateway:
discovery:
locator:
enabled: true # 开启自动服务发现
routes:
- id: http-producer-route
uri: lb://http-cloud-producer #生产者服务名称
predicates:
- Path=/test/** # 匹配路径 /test/...
# filters:
# - RewritePath=/test/(?<segment>.*), /test/feign/${segment} # 重写为生产者的接口路径
uri:这个属性为生产者在注册中心的服务名称
Path:这个属性为生产者提供的接口路径路由
注册中心配置相关和前面服务一样,可参考前面的nacos集成篇
修改消费者FeignService类
@FeignClient(name = "cloud-gateway")
public interface FeignService {
}
主要就是修改注解中的服务名称,将之前的生产者服务名称修改为网关的服务名称。
消费者向请求网关服务,在通过网关服务路由转发到生产者
结果验证
至此网关配置成功了