首页 > 其他分享 >在SpringCloud2023中快速集成SpringCloudGateway网关

在SpringCloud2023中快速集成SpringCloudGateway网关

时间:2024-05-09 10:12:52浏览次数:27  
标签:网关 spring SpringCloudGateway gateway cloud Spring Gateway SpringCloud2023

你好,这里是codetrend专栏“SpringCloud2023实战”。

本文主要简单介绍SpringCloud2023实战中SpringCoudGateway的搭建。

后续的文章将会介绍在微服务中使用熔断Sentinel、鉴权OAuth2、SSO等技术。

前言

网关的选型不多,目前spring支持和维护的项目是 Spring Cloud Gateway。

Spring Cloud Gateway作为一个轻量级、高性能、可定制的网关服务,具有与Spring生态系统的紧密集成、负载均衡、断路器等丰富的功能,适用于构建微服务架构中的网关层,提供统一的访问控制、路由转发和过滤处理等功能。

Gateway 具有以下优点:

  • 高度可定制性:Spring Cloud Gateway采用了一种基于过滤器链的方式来处理请求,可以根据实际需求自定义过滤器,实现对请求的各个环节进行精细化控制和处理。这种可定制性使得开发人员可以根据具体业务场景快速构建符合需求的网关。
  • 集成简单:Spring Cloud Gateway与Spring生态系统紧密集成,特别是与Spring Boot结合使用时,可以充分利用Spring Boot的自动配置和约定大于配置的特性,简化了网关的配置和部署过程。同时,它也与其他Spring Cloud组件(如Eureka、Ribbon、Hystrix等)无缝集成,提供了完善的微服务治理能力。
  • 轻量高性能:Spring Cloud Gateway基于Reactor和WebFlux框架,采用非阻塞的异步编程模型,相比传统的Servlet容器,具有更好的性能和吞吐量。它还支持响应式编程风格,能够处理大量并发请求,并通过异步IO模型提供更低的延迟。
  • 内置负载均衡:Spring Cloud Gateway内置了负载均衡功能,可以根据服务实例的健康状态和负载情况自动进行请求的负载均衡。通过与服务注册中心集成,可以动态地发现和管理服务实例,实现智能路由和负载均衡。
  • 支持断路器:Spring Cloud Gateway集成了Hystrix,可以通过配置断路器模式来保护后端服务免受故障的影响。当后端服务出现故障或超时时,可以快速失败并返回预定义的错误响应,提高系统的稳定性和容错能力。
  • 动态路由:Spring Cloud Gateway支持动态路由配置,可以根据需要动态添加、删除或修改路由规则,而无需重启网关服务。这种动态路由的特性使得系统更具灵活性和可扩展性,能够快速适应业务需求的变化。

前置条件

  • 网关和服务提供者都需要集成注册中心,方便使用负载均衡。
  • 使用JDK17+,这也是SpringBoot3的最低要求。

Gateway如何工作的

这张图大概说明了网关如何工作的。

客户端向 Spring Cloud Gateway 发送请求。如果网关处理器映射确定请求匹配某个路由,则将其发送到网关 Web 处理器。该处理器将请求通过特定于请求的过滤器链。

过滤器被分为前后两部分,原因是过滤器可以在代理请求发送之前和之后运行逻辑。

所有前置过滤器逻辑都会被执行。然后发出代理请求。代理请求发出后,将运行后置过滤器逻辑。

Gateway集成

引入pom.xml

  • 引入Gateway主要是引入 spring-cloud-starter-gateway
  • 同时需要集成注册中心,以实现服务调用的负载均衡。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>io.rainforest</groupId>
        <artifactId>banana</artifactId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>banana-gateway</artifactId>
    <description>spring cloud gateway</description>
    <packaging>jar</packaging>


    <dependencies>
        <!--gateway 网关依赖,内置webflux 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <!--注册中心客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <!-- LB 扩展 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!-- 工具包依赖 -->
        <dependency>
            <groupId>io.rainforest</groupId>
            <artifactId>banana-common-core</artifactId>
        </dependency>
        <!--接口文档-->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

修改配置

  • 新增配置文件 application.yml,网关配置主要是 spring.cloud.gateway 下面的配置。
spring.application.name: gateway
spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181
    gateway:
      discovery:
        locator:
          enabled: false
          lowerCaseServiceId: true
      routes:
        - id: client1
          uri: lb://client1
          predicates:
            - Path=/client1/**
#          filters:
#            - StripPrefix=0
        - id: client2
          uri: lb://client2
          predicates:
            - Path=/client2/**
          filters:
            - StripPrefix=0
        - id: client3
          uri: lb://client3
          predicates:
            - Path=/client3/**
          filters:
            - StripPrefix=0
server:
  port: 10100
  servlet:
    context-path: /gateway

  • spring.cloud.gateway.routes 配置不同的服务路由。

修改启动类

  • 启动类不需要特殊修改。
package io.rainforest.banana.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

调用demo

不需要修改代码就可以开箱即用Gateway。此处仅展示如何调用。

实际情况中网关还需要使用它强大的Filter来实现各种功能。

在这里Gateway就相当于一个更加强大的Nginx。只做了路由分发。

  • 通过 localhost:10100/client3/** 可以访问注册中心服务编码为client3的所有接口。

完整源码信息查看可以在gitee或者github上搜索r0ad

关于作者

来自一线全栈程序员nine的探索与实践,持续迭代中。

欢迎关注或者点个小红心~

标签:网关,spring,SpringCloudGateway,gateway,cloud,Spring,Gateway,SpringCloud2023
From: https://www.cnblogs.com/r0ad/p/18181491

相关文章

  • 视频汇聚边缘网关EasyCVR硬件设备无法访问域名,解析失败该如何处理?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视频监控的能力,也具备接入AI智能分析的能力......
  • 232自由口转Profinet网关接基恩士扫码枪与PLC通讯案例
     232自由口转Profinet网关(XD-PNR100/300)是一款作用于将232自由口转换为Profinet协议,实现不同网络之间的无缝通信和数据交换。232自由口转Profinet网关具有极高的灵活性和可靠性,为工业控制系统提供了强大的支持。通过将自由口信号转换为Profinet协议,可以轻松实现不同设备之间的......
  • Linux 7修改网卡名称后,配置文件中的默认网关不生效【转载】
    背景 为了系统统一管理在创建了系统后统一将网卡名称修改为eth0,eth1等格式,并在修改完网卡名称重新编译grub配置文件重启后,添加了静态路由,使用route-n查看系统发现路由可以生效,但是配置的默认网关不生效,记录下排查过程。检查网卡配置文件并手动配置默认网关 在检查了网卡配......
  • 基于边缘智能网关的工业燃气管网监测应用
    随着城市化和工业化的飞速发展,燃气的使用量和应用范围持续增加,燃气管网作为承载燃气输送的设施,安全问题至关重要。一旦燃气管网发生泄漏事故,极易引发起火、爆炸等,从而酿成人员伤亡及财产损失的恶性事故。 得益于物联网技术的发展和普及,传统的工业设施不断与先进信息技术加深结......
  • 232自由口转Profinet网关接AB扫码枪与PLC通讯案例
     232自由口转Profinet网关(XD-PNR100/300),是一种用于将自由协议转换为Profinet协议的设备,可以实现不同网络之间的通信和数据交换。232自由口转Profinet网关高度的灵活性和可靠性使其成为工业自动化领域的重要工具,并将其与Profinet网络无缝集成,实现数据的快速传输和交换。另外23......
  • 如何基于surging跨网关跨语言进行缓存降级
    概述      surging是一款开源的微服务引擎,包含了rpc服务治理,中间件,以及多种外部协议来解决各个行业的业务问题,在日益发展的今天,业务的需求也更加复杂,单一语言也未必能抗下所有,所以在多语言行业解决方案优势情况下,那么就需要多语言的协同研发,而对于协同研发环境下,统一配置......
  • 232Modbus转Profinet网关接扫码枪与PLC通讯
    Modbus转Profinet网关(XD-PNR100/300)的主要作用是实现Modbus协议和Profinet协议之间的转换和通信。本案例是用Modbus转Profinet网关接扫码枪与PLC通讯,扫码枪通常通过特定的接口与计算机或其他设备传输数据,而PLC(可编程逻辑控制器)则通常使用Profinet等工业通信协议。要将扫码枪通过......
  • Profinet转Modbus网关接称重设备与1200PLC通讯
     Profinet转Modbus网关(XD-MDPN100)是一种能够实现Modbus协议和Profinet协议之间转换的设备。Profinet转Modbus网关可提供单个或多个RS485接口,使用Profinet转Modbus网关将称重设备与西门子1200PLC进行通讯,可以避免繁琐的编程和配置过程,节省了工程师的时间和精力。其次,它提供了灵......
  • Modbus转Profinet网关连接打印设备与PLC通讯
      Modbus转Profinet网关(XD-MDPN100)是一种能够实现Modbus协议和Profinet协议之间转换的设备。Modbus转Profinet网关可提供单个或多个RS485接口,使得不同设备之间可以顺利进行通信。当我们需要连接打印设备与PLC进行通讯时,Modbus转Profinet网关可以将打印设备与PLC之间建立起稳定......
  • Modbus转Profinet网关连接传感器与PLC通讯
    Modbus转Profinet网关(XD-MDPN100/300)是用于将Modbus协议和Profinet协议进行转换并进行通讯的设备。Modbus转Profinet网关可以实现Modbus和Profinet协议之间的相互转换,并自带网口和串口,既可实现协议的相互转换,也可实现接口的相互转换。当使用Modbus转Profinet网关连接传感器与PLC......