SpringCloud(23):Sentinel对Spring Cloud Gateway的支持

news2024/12/23 9:10:06

代码地址:https://download.csdn.net/download/u013938578/87767363

从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:

  • route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId
  • 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

网关微服务构建

1.创建子工程sentinel_gateway,在pom.xml文件中引入依赖

        <!--网关的起步依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!--eureka注册中心客户端的起步依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.在引导类中配置eureka客户端开启注解

package com.example.demo;

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

@SpringBootApplication
@EnableDiscoveryClient //开启Eureka客户端发现功能
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class, args);
    }
}

3.在application.yml配置文件中配置应用的端口、应用的名称、eureka配置

# 端口
server:
  port: 9013

# 应用的名称
spring:
  application:
    name: sentinel-gateway

# eureka配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9010/eureka

4.在application.yml配置文件中进行网关配置

# 应用的名称
spring:
  cloud:
    gateway:
      routes:
        - id: sentinel-feign-gateway
          # 路由转发路径
          uri: lb://sentinel-feign-client:9012
          # 断言
          predicates:
            - Path=/hello/**

5.运行测试

启动微服务

  • eureka_server
  • sentinel_feign_client
  • sentinel_feign_provider
  • sentinel_gateway

浏览器输入http://localhost:9013/hello,浏览器会显示出”Hello Sentinel!“的内容,表示网关微服务已经配置好。

 

整合sentinel

网关微服务配置好之后,就可以开始整合Spring Cloud GateWay和Sentinel了。

1.在sentinel_gateway的pom.xml中引入依赖

        <!--Spring Cloud Alibaba Sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

        <!--sentinel支持spring cloud gateway的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

2.创建GatewayConfiguration配置类,配置流控降级回调操作

package com.example.demo.config;

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;

@Component
public class GatewayConfiguration {

    //初始化限流或者降级的回调函数
    @PostConstruct
    public void doInit(){
        //设置限流或者降级的回调函数
        GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
            //被限流或降级处理的方法
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                return ServerResponse.status(200).syncBody("系统繁忙,请稍候");
            }
        });
    }

}

3.在application.yml中配置Sentinel控制台访问地址

# 应用的名称
spring:
  # 网关配置
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.222.132:9000

4.运行测试

启动项目,在Sentinel控制中增加关于资源的流控规则,Sentinel在适配Spring Cloud Gateway时提供了两种配置资料的规则

  • route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId自定义 API
  • 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

route维度规则定义

在sentinel控制台中增加流控规则,其中API类型选择“Route ID”,API名称为网关配置的路由id,QPS阀值设置为2。

 

 之后,在浏览器中输入http://localhost:9013/hello,慢速刷新,则持续显示”Hello Sentinel”;快速刷新则会交替出现”Hello Sentinel”和“系统繁忙,请稍候”。这说明对资源限流成功。

自定义 API 维度

在sentinel控制台的左侧菜单中选择“API管理”,在弹出的窗口中新增API分组,API名称自己定义,匹配模式选择”前缀“,匹配串设置为网关路由的断言路径。

 

 之后,在sentinel控制台的左侧菜单中选择“流控规则”,其中API类型选择“API分组”,API名称为之前添加的API分组的名称,QPS阀值设置为2。

 

 

之后,在浏览器中输入http://localhost:9013/hello,慢速刷新,则持续显示”Hello Sentinel”;快速刷新则会交替出现”Hello Sentinel”和“系统繁忙,请稍候”。这说明对资源限流成功。

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

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

相关文章

ChatGPT 入门教程||ChatGPT 应用场景1:让AI回答问题||ChatGPT应用场景2:基于已有的示例回答

ChatGPT 应用场景1&#xff1a;让AI回答问题 这个场景应该是使用 AI 产品最常见的方法。以 ChatGPT 为例&#xff0c;一般就是你提一个问题&#xff0c;ChatGPT 会给你答案&#xff0c;比如像这样&#xff1a; 在这个场景下&#xff0c;prompt 只要满足前面提到的基本原则&am…

通过opencv与神经网络对滑动验证码的一次深入学习

好久没写博客了&#xff0c;人到中年&#xff0c;有点儿犯懒。 从信息安全行业&#xff0c;又去了IT合规领域&#xff0c;与信息安全结合还是两手抓&#xff0c;两手都不硬。 由于工作原因&#xff0c;需要获取一个token来请求接口&#xff0c;奈何没有现成的接口&#xff0c…

记一次Android页面卡顿排查总结

背景&#xff1a;更新完gosdk&#xff08;端上的主要逻辑在go层完成&#xff09;后&#xff0c;冷启动时首页明显会卡一下 问题排查&#xff1a; 1、通过在application onCreate()中设置getMainLooper().setMessageLogging(new LxLogPainter());来查看耗时的日志&#xff0c;…

cfssl使用方法重新整理说明

下载安装&#xff1a; #下载cfssl、cfssl-json、cfssl-certinfo文件 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssljson wget https://pkg.cfssl.org/R1.2/cfssl-certinfo…

低代码开发:构建企业数字化生态系统的秘密武器!

目前&#xff0c;我们正处于数字化时代&#xff0c;而企业数字化早已是大势所趋&#xff0c;也是因为企业数字化转型是提高企业效率与竞争力的必经之路。 发展背景 近年来&#xff0c;伴随着人工智能、大数据分析技术、云计算等领域的迅速发展&#xff0c;不少企业开始正视数字…

【How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读】

How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读 INFORMATIONAbstract1 Introduction2 Background3 Experiments3.1 Prompt Design3.2 Experimental Setup3.2.1 Datasets3.2.2 Baselines and Evaluation Metrics 3.3 Multilingual Translation3.4…

接入支付宝沙箱环境

1、这里有几个重要数据要拿到&#xff0c;一个是支付宝的公钥和私钥&#xff0c;一个是支付的网关&#xff0c;和支付的APPID。这几个数据是要写到代码中的 官方手册&#xff1a;文档地址 1.1 配置沙箱应用环境 https://openhome.alipay.com/develop/sandbox/app 1.2 配置接口…

Git忽略文件的几种方法,以及.gitignore文件的忽略规则

Git忽略文件的几种方法&#xff0c;以及.gitignore文件的忽略规则 .gitignore文件定义Git全局的.gitignore文件Git 忽略规则Git忽略规则的优先级.gitignore文件忽略规则常用匹配示例&#xff1a; 关于.gitignore规则不生效的问题 不忽略没有后缀名的文件搜索电脑里没有后缀的文…

请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨)为什么很多人说崖山海战以后无中国

目录 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 为什么很多人说崖山海战以后无中国 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 以下是我对《unravel - TK from 凛冽时雨》这首歌词的理解&#xff1…

Hadoop部署伪分布式

伪分布式模式也是只需要一台机器&#xff0c;但是与本地模式的不同&#xff0c;伪分布式使用的是分布式的思想&#xff0c;具有完整的分布式文件存储和分布式计算的思想。只不过在进行存储和计算的时候涉及到的相关的守护进程都运行在同一台机器上&#xff0c;都是独立的Java进…

《LKD3粗读笔记》(15)进程地址空间

进程地址空间&#xff1a;内核除了管理本身的内存外&#xff0c;还必须管理用户空间中进程的内存&#xff0c;这个内存就是进程地址空间&#xff0c;即系统中每个用户空间进程所看到的内存。Linux操作系统采用虚拟内存技术&#xff0c;系统中的所有进程之间以虚拟方式共享内存。…

面试都不会造火箭,还想拿20k,过于离谱

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

iOS App外包开发的内存泄露解决

在iOS应用开发中&#xff0c;内存泄露是一个常见的问题。内存泄露会导致应用程序占用越来越多的内存&#xff0c;最终可能导致应用程序崩溃。为了解决这个问题&#xff0c;可以使用以下工具和方法来查找和修复内存泄露。今天和大家分享这方面的知识&#xff0c;希望对大家有所帮…

AttributeError: module ‘gym‘ has no attribute ‘benchmark_spec‘解决办法

报错如下&#xff1a; 我安装的gym版本是gym-0.26.2 报错原因&#xff1a;gym版本太高了&#xff0c;需要降低版本 pip install gym0.9.0 -i https://pypi.douban.com/simple

@Qualifier注解详解

本文来说下Qualifier注解使用 文章目录 Autowired注解Qualifier注解Primary注解 Resource注解 Autowired注解 spring Autowire 的注解默认是按类型注入bean 如果存在多个实现类&#xff0c;可以使用 Qualifier注解 Qualifier注解 Primary注解 存在多个实现类&#xff0c;也可以…

支持双向充放电的高效Buck-Boost控制器——TMI5810

传统方案下&#xff0c;MCU需要分别控制“充电电路”和“放电电路”的功能模块实现电池包充放电&#xff0c;整个过程相当复杂&#xff0c;电路设计也比较繁琐。 拓尔微TMI5810是一颗集双向充放电和高效率于一身的同步升降压电源管理芯片&#xff0c;能有效解决多节锂电池充放电…

RAM Sequential

前段时间&#xff0c;在微信公众号上偶然看到一篇很不错的技术分享文章&#xff1a;《南湖处理器DFT设计范例》。文中详细介绍了中科院计算所的RISC-V处理器实施的DFT设计。 去年&#xff0c;也基于一款处理器应用过Share Test Bus技术&#xff0c;但在memory界面fault测试的问…

基于 ESP32 创建 HTTP Server 服务器,支持载入文件到服务器,并对载入文件进行删除管理

软件编程指南参见&#xff1a;HTTP 服务器 测试准备 任意一款 ESP32 系列开发板2.4GHz 路由器热点准备各种格式的文件 测试软件 可基于 esp-idf/examples/protocols/http_server /file_serving 例程进行测试 测试步骤 1、软件配置 只需要设置 ESP32 连接的 2.4GHz 的 WiFi…

linux 部署Nginx

1&#xff0c;进入官网下载Nginx资源: 官网下载&#xff1a;http://nginx.org/en/download.html 2、下载 nginx-1.20.2 3、上传服务器 /opt目录 4、解压nginx-1.20.2.tar.gz 到当前目录 tar -zxvf nginx-1.20.2.tar.gz 5、配置基本信息&#xff0c;命令如下 #配置config…

香港服务器如何操作域名解析让网站上线?

​  网站上线是一个需要多个步骤的过程&#xff0c;其中之一就是解析IP。在这个过程中&#xff0c;您需要将您的网站域名解析到香港服务器IP地址&#xff0c;以便访问者可以通过域名来访问您的网站。 下面是解析IP的一般步骤&#xff1a; 1. 获取服务器IP地址&#xff1a;首先…