【微服务】Spring Cloud Gateway

news2024/9/17 8:58:41

文章目录

      • 强烈推荐
      • 引言
      • 主要功能
      • 关键概念
      • 示例配置
      • 依赖添加
      • 常见的几种整合案例
        • 1. 与 Spring Cloud Eureka 整合
        • 2. 与 Spring Cloud Config 整合
        • 3. 与 Spring Cloud Sleuth 和 Zipkin 整合
        • 4. 与 Spring Cloud Security 整合
        • 5. 与 Resilience4j 整合
        • 6. 与 Redis 整合
      • 结论
      • 强烈推荐
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

image-20240728235548352


引言

Spring Cloud Gateway 是一个基于 Spring Framework 和 Spring Boot 的 API 网关解决方案,它为微服务架构提供了动态路由、监控、弹性和安全等功能。

以下是 Spring Cloud Gateway 的一些关键概念和功能的详细介绍:


主要功能

  1. 路由(Routing)
    • 路由是网关最基本的功能。Spring Cloud Gateway 允许你根据请求路径、请求方法、请求头、请求参数等条件将请求转发到相应的微服务实例。
  2. 过滤器(Filters)
    • 过滤器是对请求和响应进行修改的一种方式。Spring Cloud Gateway 提供了两种类型的过滤器:全局过滤器和路由过滤器。过滤器可以用于验证、日志记录、请求重写、响应处理等场景。
  3. 负载均衡(Load Balancing)
    • 通过整合 Spring Cloud LoadBalancer 或者 Netflix Ribbon,Spring Cloud Gateway 可以实现对后端微服务的负载均衡。
  4. 断路器(Circuit Breaker)
    • 通过集成 Resilience4j 或者 Hystrix,Spring Cloud Gateway 可以在后端服务出现故障时快速失败,并返回预定义的响应,保护系统不被拖垮。
  5. 限流(Rate Limiting)
    • 通过 Redis 等中间件,Spring Cloud Gateway 可以实现对请求速率的限制,防止恶意请求或流量激增导致系统崩溃。
  6. 安全(Security)
    • 通过与 Spring Security 集成,Spring Cloud Gateway 可以提供认证和授权功能,保护后端服务免受未授权的访问。

关键概念

  • Route

    路由是构建网关的基本单元,每一个路由包含一个 ID、一个目标 URI、一组谓词和一组过滤器。

  • Predicate

    谓词用于匹配请求,当一个请求满足谓词的条件时,它会被路由到相应的微服务。常见的谓词包括路径匹配、方法匹配、头匹配等。

  • Filter

    过滤器用于在请求被路由前或响应被返回前对其进行修改。过滤器可以链式调用,从而实现复杂的请求处理逻辑。


示例配置

以下是一个简单的 Spring Cloud Gateway 配置示例,通过 application.yml 文件进行配置:

spring:
  cloud:
    gateway:
      routes:
      - id: example_route
        uri: http://example.com
        predicates:
        - Path=/example/**
        filters:
        - AddRequestHeader=X-Request-Example, ExampleHeader

在这个例子中,example_route 是一个路由 ID,当请求路径匹配 /example/** 时,请求会被转发到 http://example.com。同时,在请求头中会添加一个 X-Request-Example 的自定义头。

依赖添加

要使用 Spring Cloud Gateway,你需要在 Spring Boot 项目中添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

此外,还需要在 pom.xml 中指定 Spring Cloud 版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

常见的几种整合案例

1. 与 Spring Cloud Eureka 整合

Eureka 是 Spring Cloud 的服务发现组件。将 Spring Cloud Gateway 与 Eureka 整合后,网关可以动态地发现和路由到注册在 Eureka 服务注册中心的微服务。

配置示例:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
    loadbalancer:
      retry:
        enabled: true

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. 与 Spring Cloud Config 整合

Spring Cloud Config 提供了分布式系统中的外部配置支持。通过将 Spring Cloud Gateway 与 Spring Cloud Config 整合,可以实现配置的集中管理和动态刷新。

配置示例:

spring:
  cloud:
    config:
      uri: http://localhost:8888

依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3. 与 Spring Cloud Sleuth 和 Zipkin 整合

Spring Cloud Sleuth 提供了分布式跟踪功能,而 Zipkin 是一个分布式跟踪系统。将它们与 Spring Cloud Gateway 整合后,可以跟踪跨越多个微服务的请求路径,帮助分析性能瓶颈和问题。

配置示例:

spring:
  sleuth:
    sampler:
      probability: 1.0
zipkin:
  base-url: http://localhost:9411
  enabled: true

依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
4. 与 Spring Cloud Security 整合

Spring Cloud Security 提供了 OAuth2 和 JWT 的支持,通过将其与 Spring Cloud Gateway 整合,可以实现对微服务的认证和授权。

配置示例:

spring:
  security:
    oauth2:
      client:
        registration:
          login-client:
            client-id: login-client-id
            client-secret: login-client-secret
            scope: read,write
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8080/login/oauth2/code/login-client
        provider:
          login-provider:
            authorization-uri: http://auth-server/oauth/authorize
            token-uri: http://auth-server/oauth/token
            user-info-uri: http://auth-server/user

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
5. 与 Resilience4j 整合

Resilience4j 是一个轻量级的容错库,通过将其与 Spring Cloud Gateway 整合,可以实现熔断器、限流、重试等功能。

配置示例:

resilience4j:
  circuitbreaker:
    instances:
      backendA:
        slidingWindowSize: 100
        failureRateThreshold: 50

依赖:

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot2</artifactId>
    <version>1.7.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
6. 与 Redis 整合

通过将 Redis 与 Spring Cloud Gateway 整合,可以实现请求限流和缓存等功能。限流可以防止某个客户端发送过多请求,而缓存可以提高性能。

配置示例:

spring:
  redis:
    host: localhost
    port: 6379

spring:
  cloud:
    gateway:
      redis-rate-limiter:
        replenish-rate: 10
        burst-capacity: 20

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

通过与这些组件的整合,Spring Cloud Gateway 可以更加高效、可靠地管理和处理微服务架构中的流量和请求。


结论

Spring Cloud Gateway 提供了强大的功能来管理微服务架构中的 API 流量。通过灵活的路由和过滤器机制,你可以轻松实现各种复杂的流量管理需求,同时保证系统的高可用性和安全性。


强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

image-20240728235548352


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

如果有项目或者毕设合作,请V:fengyelin8866,备注项目合作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab编程资源库(19)级数与符号方程求解

一、级数符号求和 求无穷级数的和需要 符号表达式求和函数 symsum &#xff0c;其调用 格式为&#xff1a; symsum(s,v,n,m) 其中 s 表示一个级数的通项&#xff0c;是一个符号表达式。 v 是求和变 量&#xff0c; v 省略时使用系统的默认变量。 n 和 m 是求和的开始项 和…

如何恢复WPS文档中未保存或删除的文件

由于各种原因&#xff0c;您可能会丢失 WPS 文档&#xff0c;例如意外删除、硬盘格式化、病毒攻击等。您是否遇到过丢失未保存的 WPS 文件的情况&#xff1f;您知道如何恢复 WPS 文档中未保存的文件吗&#xff1f; WPS Office 是一款办公套件&#xff0c;可以作为 Microsoft O…

火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作者&#xff1a;王恩策、徐庆 火山引擎 LAS 团队 火山引擎数智平台 VeDI 是火山引擎推出的新一代企业数据智能平台&#xff0c;基于字节跳动数据平台多年的“数据…

一个私有化的中文笔记工具个人知识库,极空间Docker部署中文版『Trilium Notes』

一个私有化的中文笔记工具&个人知识库&#xff0c;极空间Docker部署中文版『Trilium Notes』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 最近被很多小伙伴问到NAS上的笔记工具&#xff0c;虽说之前也出过Memos&#xff0c;刚开始用起来还不错&#xff0c;但是用了一段时间…

W1R3S靶机全通详细教程

文章目录 w1r3s主机发现主机扫描 端口扫描tcp端口扫描UDP扫描漏洞扫描 攻击面分析FTP渗透匿名登录 web渗透目录爆破 cuppa cms文件包含漏洞getshell提权 w1r3s 引言 近些日子看红笔大佬的靶机精讲视频时&#xff0c;他的一句话让我感受颇深&#xff0c;很多视频在讲解时&…

《Windows API每日一练》23.1 Windows多媒体

本节我们将讲述单线程到多线程的演进过程&#xff0c;以及进程与线程的区别。 本节必须掌握的知识点&#xff1a; 多媒体硬件 API 概述 第172练&#xff1a;交互输入MCI命令 23.1.1多媒体硬件 多媒体硬件是指用于处理音频、视频和其他多媒体内容的硬件设备。在计算机系统中&…

迈尔沃护眼大路灯怎么样?书客、迈尔沃、霍尼韦尔护眼灯测评PK!

迈尔沃护眼大路灯怎么样&#xff1f;作为一名专业的实测博主&#xff0c;温馨提示大家&#xff0c;虽然护眼落地灯是个好东西&#xff0c;它能够提供柔和舒适的环境光&#xff0c;减少对眼睛的伤害&#xff0c;但是千万别乱买跟风&#xff0c;盲目入手踩雷率80%以上。那么如何辨…

SpringBoot集成 Druid 连接池及监控配置详解

Spring Boot 集成 Druid 连接池及监控配置详解 Spring Boot 是当前 Java 开发中的热门框架&#xff0c;而在数据库连接池的选择上&#xff0c;Druid 因其性能和功能强大也备受青睐。在这篇文章中&#xff0c;我们将深入探讨如何在 Spring Boot 项目中集成 Druid 连接池&#x…

大厂linux面试题攻略二之Linux系统管理

一、Linux系统管理权限优化类 1.简述Linux权限划分原则&#xff08;经验类&#xff09; 文件权限&#xff1a; 默认权限&#xff1a; 特殊权限; ACL权限&#xff1a; sudo授权&#xff1a; 文件系统属性权限&#xff1a; 解题思路&#xff1a; 注意权限分离(Linux系统…

入门 PyQt6 看过来(案例)17~ 表格

PyQt6提供了两种用于有规律地呈现更多数据的控件&#xff0c;一种是表格结构的控件(QTableView)&#xff0c;另一种是树形结构的控件(QTreeView)。表格控件属于QTableView类&#xff0c;QTableWidget继承于QTableView。 1 QTableView 表格控件 QTableView控件中QStandItemMod…

安胜:促进数据跨境有序流动 赋能企业数字化转型

数字化转型浪潮中&#xff0c;数据出境面临众多机遇与挑战。从业务角度&#xff0c;经济全球化推动外商投资、跨境业务等业务合作&#xff0c;企业数据跨境流动需求强烈&#xff0c;但数据违规现象频发&#xff0c;不仅导致巨大经济损失&#xff0c;还挑战了国家安全。从监管层…

什么是 HTTP/3?HTTP/3 为何席卷全球?HTTP/3 中有什么新内容?为什么需要它?

超文本传输​​协议 ( HTTP ) 是互联网的基石&#xff0c;有助于加载网页、流式传输视频以及为您最喜爱的应用程序获取数据。 去年 &#xff0c;负责定义互联网技术的组织 互联网工程任务组 ( IETF )对该协议的新版本 HTTP/3 进行了标准化。自那时起&#xff0c;HTTP/3 和相关…

KubeSphere 部署向量数据库 Milvus 实战指南

作者&#xff1a;运维有术星主 Milvus 是一个为通用人工智能&#xff08;GenAI&#xff09;应用而构建的开源向量数据库。它以卓越的性能和灵活性&#xff0c;提供了一个强大的平台&#xff0c;用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索&#xff0c;并以…

纷享销客北方战区游学营举行 五大专项助力伙伴业务“倍速增长”

首届纷享销客北方战区渠道核心伙伴游学营日前在山东济南登场&#xff0c;此次游学营一共设置了五大模块&#xff0c;包括财务专项、组织建设专项、团队成长专项、开源专项、续费及增购专项&#xff0c;旨在帮助纷享销客渠道伙伴夯实高质量增长基础&#xff0c;全方位提升企业经…

上海亚商投顾:沪指震荡收跌 地产、芯片股逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场昨日探底回升&#xff0c;三大股指小幅下跌&#xff0c;黄白二线分化明显。 商业航天概念继续走强&#…

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…

wpf基础

快速换行的快捷键 vs 工具->选项->文本编辑器->XAML->Formatting(格式化)->spacing(间距)-> 选择第三个 &#xff0c;将各个属性分行放置。 然后按CtrlKD 如何快速生成下面的代码 鼠标放在Slider_ValueChanged上面然后FnF12 就可以快速生成 wpf中的绑定 在…

Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签

本教程主要实现【Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签】。 本文源码&#xff1a;https://gitee.com/songfayuan/go-zero-demo 教程源码分支&#xff1a;master 分支&#xff08;_examples/word-template/fill-word-template.go&…

ZFIU001 批导会计凭证报错,通过监控点和消息类来定位触发的位置

在创建会计凭证的时候&#xff0c;发送错误&#xff0c;通过打消息类和消息号的条件断点/监控点才解决 文章目录 报错消息号&#xff1a;F5846 创建监控点创建条件断点 报错原因非常注意 报错 消息号&#xff1a;F5846 创建监控点 创建条件断点 报错原因 非常注意

Java8新特性之Stream-Map

Map一些新方法的具体使用案例 1、getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.threadpool;import java.util.HashMap; import java.util.Map;/*** author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)* version 1.0* date…