SpringCloudGateway入门实战

前言

Spring Cloud Gateway 是Spring 基于Spring5.0、SpringBoot2.0和Project Reactor等技术开发的微服务网关服务。是为Spring Cloud 微服务提供简单高效的API路由管理方式。作为Spring Cloud微服务生态系统中的网关服务,目标就是为了能替代Netflix的Zuul网关的存在,在提供了路由网关的基础上,通弄过Filter的方式提供了一些其他的功能例如:接口安全、服务监控、服务埋点、服务限流等功能。

下面我们就来通过一个简单的例子来看一下Spring Cloud Gateway的工作原理。

创建项目

第一步、我们来创建一个Spring Cloud Gateway的Maven项目,并且引入Spring Cloud Gateway相关的依赖。如下所示。

复制代码
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

第二步、只需要设置一个主启动类即可

复制代码
@SpringBootApplication
public class GatewayApplication {
	public static void main(String[] args) {
		SpringApplication.run(GatewayApplication.class, args);
	}
}

到这里,也许会有人问是不是这个项目这样搭建得有点太简单了,我们如何来实现路由的转发呢?下面我们就来看看如何实现路由转发操作

路由转发示例

我们可以在配置文件中添加如下的配置来实现路由转发功能。

复制代码
server:
  port: 8080
spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://www.baidu.com
        predicates:
        - Path=/test

添加完这个配置之后,我们如果我们访问了

http://localhost:8080/test这个时候,我们的路由就会被转发到百度的首页上去了,如果要访问多级的Path路径,只需要在对应的配置路径下加上 * 就可以了。例如

复制代码
server:
  port: 8080
spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://www.baidu.com
        predicates:
        - Path=/test/**	

这样一来,上面的配置就可以支持多级Path的访问例如我们可以通过

http://localhost:8080/test/iamge,http://localhost:8080/test/fanyi等等路径进行访问。

这里我们看到,在我们配置调用的过程中所有的访问都是在http://www.baidu.com上进行访问的,但是在实际的微服务场景中,我们的后端需要访问的服务有很多的微服务组成,而这些微服务都被我们统一管理在Eureka注册中心,那么我们如何才能调用注册中心中的服务呢?

整合Eureka路由

需要整合Eureka首先需要将这个网关作为一个服务注册到Eureka注册中心。所以需要在POM文件中添加Eureka客户端相关的依赖,如下。

复制代码
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

添加完对应的依赖之后我们就可以对配置文件进行修改了。

复制代码
server:
  port: 8080
spring:
  cloud:
    gateway:
      routes:
      - id: user-service
        uri: lb://user-service
        predicates:
        - Path=/user-service/**

我们可以通过在Eureka中配置的服务名称来进行调用,这种调用方式在之前的例子中我们也有使用到。在uri中是以lb://开头,表示这里可能还会用到负载均衡相关的内容,这个在后续的文章中我们也会提到。

在Zuul 中会对所有的服务都进行转发,在调用的时候只需要指定需要访问的服务就可以完成调用。通过这个方式就不需要再为每个服务都配置转发的规则了,当需要添加新的服务上去的时候也不需要配置路由规则以及重启网关等操作。

既然Spring Cloud Gateway是旨在替代Zuul,那么就一定也会有同样的支持。那么我们如何来实现整合Eureka的默认路由操作呢?

整合Eureka的默认路由

要开启Spring Cloud Gateway的默认路由操作需要进行如下的配置设置,这里我们进行了两个配置的修改,第一是支持默认路由的配置、第二则是开启大小写服务。

复制代码
server:
  port: 8080
spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: user-service
        uri: lb://user-service
        predicates:
        - Path=/user-service/**

大小写服务对服务的调用影响还是蛮大的,如果从Zuul改造到使用了Spring Cloud Gateway之后服务地址也会有很多的变化而大小写服务则是提供了开发者一个默认的服务配置支持操作。完成配置之后,我们就可以通过小写配置来进行访问。

这里需要注意的是开启了大小写服务之后 ,就只能用小写服务名进行调用,而不能再使用大写服务名进行调用。

总结

通过上面的例子,我们简单的理解了Spring Cloud Gateway的使用,并且也了解Spring Cloud Gateway如何整合Eureka进行服务的调用配置,在后续的文章中还会对Gateway进行深入的介绍,期待大家的关注与支持。

相关推荐
LaughingZhu1 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
niucloud-admin19 分钟前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
Solara24 分钟前
绿灯连亮 6 天、今天我真写了 4 KB:这盏灯从没看过我写的那一层
人工智能·程序员·ai编程
怕浪猫32 分钟前
我有个朋友,工作八年,公司从 300 人减到 80 人
面试·程序员
IT枫斗者枫哥33 分钟前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
知识搬运临时工44 分钟前
一个模板把 AEM 拖进 Full GC 死亡螺旋:300% CPU、7 GB 堆、310 万行堆栈
java·aws
用户432935928051 小时前
CoAP还是MQTT:1万只Cat.1水表三个月带宽续航实测
java
知守观1 小时前
多模块架构演进:横向分层 vs 纵向领域,13 个真实项目的切分对照
java·后端·微服务
Java成神之路-1 小时前
Java String 为什么不可变?和 HashMap 到底有什么关系?
java
paopaokaka_luck1 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts