(四)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中引入依赖

XML 复制代码
<!-- 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文件添加网关配置

bash 复制代码
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类

java 复制代码
@FeignClient(name = "cloud-gateway")
public interface FeignService {
    
}

主要就是修改注解中的服务名称,将之前的生产者服务名称修改为网关的服务名称。

消费者向请求网关服务,在通过网关服务路由转发到生产者

结果验证


至此网关配置成功了

相关推荐
知守观4 分钟前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven
她的男孩4 分钟前
企业接口照样拦得住:独立 Flyway、@RequiresFeature 与离线许可证
java·spring boot·后端
十年Java程序媛5 分钟前
Lambda 与函数式接口|别只会复制 ()->{},底层规则和坑一次性讲清
java·spring boot·后端
yunwei376 分钟前
eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
linux·后端·性能优化
全栈Agent 小李10 分钟前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
高频因子挖掘机12 分钟前
历史 K 线突然少一天?用交易日历、停牌信息和数据校验逐步排查
后端·github·api
m0_5873830035 分钟前
工业场景设备维修维护实战技巧 全流程标准化落地与常见问题排查指南
java·spring·小程序·架构·需求分析
行者全栈架构师36 分钟前
从 55% 到 6%:一个快餐营养规划器的算法迭代实录
后端·算法·架构
余槐i43 分钟前
无慢查询 RT 却飙升:cProfile 定位 FastAPI 事件循环阻塞
后端·python·性能优化·fastapi·asyncio
AINative软件工程1 小时前
LLM 应用的 Adaptive Batching 工程实践:动态合批把吞吐提升 3 倍,但延迟的坑你踩过吗
后端·llm·ai编程