【第26章】Spring Cloud之Sentinel适配API Gateway

文章目录

  • 前言
  • 一、准备
    • 1. 引入库
    • 2. 注册过滤器
    • 3. 添加配置
    • 4. 效果展示
  • 二、基于网关的流控
    • 1. 新增流控规则
    • 2. 测试准备
    • 3. 测试结果
  • 总结


前言

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

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

一、准备

1. 引入库

这里我引入了和sentinel-dashboard控制台相同版本的网关层依赖包,
第二个starter引入尽量和你的spring-cloud-alibaba相同即可

<!-- https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-spring-cloud-gateway-adapter -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-cloud-gateway-adapter</artifactId><version>1.8.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2023.0.1.0</version></dependency>

2. 注册过滤器

package org.example.gateway.config;import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter;
import com.alibaba.csp.sentinel.adapter.gateway.sc.exception.SentinelGatewayBlockExceptionHandler;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.web.reactive.result.view.ViewResolver;
import java.util.Collections;
import java.util.List;/*** Create by zjg on 2024/8/24*/
public class SentinelConfiguration {private final List<ViewResolver> viewResolvers;private final ServerCodecConfigurer serverCodecConfigurer;public SentinelConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,ServerCodecConfigurer serverCodecConfigurer) {this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);this.serverCodecConfigurer = serverCodecConfigurer;}@Bean@Order(Ordered.HIGHEST_PRECEDENCE)public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {// Register the block exception handler for Spring Cloud Gateway.return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);}@Bean@Order(-1)public GlobalFilter sentinelGatewayFilter() {return new SentinelGatewayFilter();}
}

3. 添加配置

spring:cloud:sentinel:transport:port: 8719dashboard: localhost:8080

4. 效果展示

在这里插入图片描述

首次加载的时候,我们需要发起一次请求,才能在界面上看到监控信息,因为 Sentinel 使用了 lazy load 策略。

二、基于网关的流控

在这里插入图片描述
通过上图大家可以清楚的看到,我们在请求了localhost:8888/provider/hello?a=1接口之后出现了对应的服务。

1. 新增流控规则

本机嘛,阈值没必要那么高

在这里插入图片描述

2. 测试准备

我这里使用curl命令来进行http请求测试,生成一个脚本,发起6次请求

curl --location --request GET 'localhost:8888/provider/hello?a=1' --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGFpbXMiOnsidXNlcm5hbWUiOiJhZG1pbiJ9LCJpc3MiOiJhdXRoMCIsImV4cCI6MTcyNDU5MDMzOH0.hWebKIoGRWSRaayncuMtwH9UPDVr5gcvcCm7R1FlxNg'

3. 测试结果

在这里插入图片描述

大家可以看到前5次是正常的,到第6次就超过了我们设置的阈值,返回都没有,其实是后台报错了导致的,我准备对各个组件适配Sentinel,这种使用方式是不太友好的。


总结

回到顶部

我最开始的愿景是:网关作为流量的统一入口,在网关层面做统一的流控是最合适不过了。

但是看到了官方的这句话Sentinel 网关流控默认的粒度是 route 维度以及自定义 API 分组维度,默认不支持 URL 粒度。若通过 Spring Cloud Alibaba 接入,请将 spring.cloud.sentinel.filter.enabled 配置项置为 false(若在网关流控控制台上看到了 URL 资源,就是此配置项没有置为 false)。
自定义支持 URL 粒度,但是这样做的工作量是巨大且难以管理的,尤其是我们有众多接口服务的时候。

这时候Sentinel针对网关的整合只能先告一段落,暂时让各个组件整合Sentinel,各组件维护自己的流控和降级规则等等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django + websocket 连不上

看了网上的几个简单例子&#xff0c;一步一步做&#xff0c;但无一成功。都连不上websocket。 后来按一个视频教程的操作步骤来做&#xff0c;成功了。差别在于视频教程中加了 pip install daphne 和setting.py中 连不上的表现&#xff1a; 前端报错&#xff1a; WebSock…

Linux网络协议栈的实现

网络协议栈是操作系统核心的一个重要组成部分&#xff0c;负责管理网络通信中的数据包处理。在 Linux 操作系统中&#xff0c;网络协议栈&#xff08;Network Stack&#xff09;负责实现 TCP/IP 协议簇&#xff0c;处理应用程序发起的网络请求并与底层的网络硬件进行交互。本文…

[SWPUCTF 2022 新生赛]

目录 [SWPUCTF 2022 新生赛]ez_rce 什么是poc&#xff1f; [SWPUCTF 2022 新生赛]where_am_i [SWPUCTF 2022 新生赛]js_sign [SWPUCTF 2022 新生赛]xff ​[SWPUCTF 2022 新生赛]numgame call_user_func()函数 ::双冒号运算符 [SWPUCTF 2022 新生赛]ez_sql [SWPUCTF 2…

TortoiseGit无法安装解决方案

Win11安装TortoiseGit报错&#xff0c;错误码&#xff1a;2503&#xff0c;如下图&#xff1a; 开始-右键-Windows PowerShell&#xff08;管理员&#xff09;/终端 (管理员) 输入 msiexec /package 安装程序所在绝对路径&#xff0c; 例如 : msiexec /package D:\我的资料…

jenkins 部署应用到多个环境

在日常开发的过程中&#xff0c;我们经常会遇到将应用程序部署到多个环境的需求场景&#xff0c;如会先发布到测试环境&#xff0c;由测试人员进行测试&#xff0c;成功之后&#xff0c;会继续将当前应用部署到集成环境&#xff0c;进行集成测试&#xff0c;全部通过后&#xf…

RAG 聊天机器人:用 Langchain 和 Streamlit开启与 PDF 的智能对话

与大量 PDF 文档的交互如今变得前所未有地便捷与智能。想象一下,您可以轻松与您的笔记、书籍和各种文档进行无缝对话,不再需要繁琐的手动查找和处理。 这篇文章将带您逐步构建一个基于 Multi-RAG 和 Streamlit 的 Web 应用程序,该应用程序通过 AI 驱动的聊天机器人来读取、…

以实时,见未来——DolphinDB 2024 年度峰会圆满举办

2024年9月6日&#xff0c;“以实时&#xff0c;见未来”—— DolphinDB 2024 年度峰会在杭州圆满落下帷幕。本次峰会由主会场与三个专题分会场组成&#xff0c;众多金融机构领导与专家、行业领袖、高校与研究机构学者等近300位嘉宾共襄盛举&#xff0c;一同探讨数智化浪潮下金融…

基于JAVA+SpringBoot+Vue的工程教育认证的计算机课程管理平台

基于JAVASpringBootVue的工程教育认证的计算机课程管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接…

第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

目录 大会介绍 基本信息 合作单位 主讲嘉宾 会议组委 征文主题 ​ 参会方式 会议日程 中国-天津 | 2024年10月25-27日 | 会议官网&#xff1a;www.iiip.net 大会介绍 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09;将于202…

MNIST数据集内容查看

测试数据集&#xff1a;t10k-images-idx3-ubyte.gz&#xff08;1.57 MB &#xff0c;包含10,000个样本&#xff09;。测试数据集标签&#xff1a;t10k-labels-idx1-ubyte.gz&#xff08;4.43 KB&#xff0c;包含10,000个样本的标签&#xff09;训练数据集&#xff1a;train-ima…

使用 Parallel 类进行多线程编码(上)

用 C# 进行多线程编程有很多方式&#xff0c;比如使用 Thread 对象开启一个新线程&#xff0c;但这已经是一种落后的写法了&#xff0c;现在推荐的写法是使用 Parallel 类&#xff0c;它可以让我们像写传统代码一样编写多线程的程序&#xff0c;Parallel 类有三个常用的方法如下…

PyTorch 创建数据集

图片数据和标签数据准备 1.本文所用图片数据在同级文件夹中 ,文件路径为train/’ 2.标签数据在同级文件&#xff0c;文件路径为train.csv 3。将标签数据提取 train_csvpd.read_csv(train.csv)创建继承类 第一步&#xff0c;首先创建数据类对象 此时可以想象为单个数据单元的…

在这12种场景下会使Spring事务失效--注意防范

在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同事写入多张表的数据&#xff0c;但为了保证操作的原子性&#xff08;要么同事插入数据成功&#xff0c;要么同事插入失败&#xff09;&#xff0c;例如&#xff0c;当我们创建用户的时候&#xff0c;往往会给用户…

【OpenCV-阈值与平滑处理】灰度图、HSV、图像阈值、图像平滑处理(方框滤波、均值滤波、高斯滤波、中值滤波)

1 灰度图 import cv2 # 导入 OpenCV 库&#xff0c;用于图像处理 import numpy as np # 导入 NumPy 库&#xff0c;用于数组操作 import matplotlib.pyplot as plt # 导入 Matplotlib 库&#xff0c;用于绘图# %matplotlib inline 是 Jupyter Notebook 特有的魔法命令&…

ABC 370 E - Avoid K Partition

原题链接&#xff1a;E - Avoid K Partition 题意&#xff1a;给长度为n的数组&#xff0c;将数组划分成任意份&#xff0c;但是每一份的总和都不能是k&#xff0c;问有多少种分割方法。 思路&#xff1a;dp&#xff0c;f[i]&#xff0c;代表前i个元素满足题意的划分的总和&a…

Windows--linux共享文件夹

1、如果共享文件夹设置在Windows上面 文件夹设置 个人家里电脑通常不设置用户名密码 linux端mount命令行 mount -t cifs -o usernamewade,vers3.0 //192.168.0.143/openvswitch-2.17.10 /root/windows

适用于计算机视觉的机器学习

使用筛选器将效果应用于图像的功能在图像处理任务中非常有用&#xff0c;例如可能使用图像编辑软件执行的任务。 但是&#xff0c;计算机视觉的目标通常是从图像中提取含义或至少是可操作的见解&#xff0c;这需要创建经过训练以基于大量现有图像识别特征的机器学习模型。 卷积…

mysql快速定位cpu 占比过高的sql语句

mysql快速定位cpu 占比过高的sql语句 当MySQL数据库的CPU使用率异常升高时&#xff0c;定位导致问题的SQL语句可以通过以下步骤进行 1、使用top命令找出mysl进程中占用CPU靠前的线程 #找出mysql 的进程号 ps -ef | grep mysql#根据进程号&#xff0c;找出占用CPU靠前的线程号…

树莓派通过串口驱动HC-08蓝牙模块

树莓派通过串口驱动HC-08蓝牙模块 文章目录 树莓派通过串口驱动HC-08蓝牙模块一、HC-08蓝牙模块介绍二、树莓派与蓝牙模块硬件连接三、树莓派通过蓝牙控制设备 一、HC-08蓝牙模块介绍 蓝牙模块&#xff0c;是一种集成的蓝牙功能的PCB板&#xff0c;用于短距离无线通信&#xff…

避障小车—51单片机

一、小车底盘组装 根据视频的安装步骤安装 二、 电机模块开发 2.1 L9110s概述 接通VCC&#xff0c;GND 模块电源指示灯亮&#xff0c; 以下资料来源官方&#xff0c;但是不对&#xff0c;根据下节课实际调试 IA1输入高电平&#xff0c;IA1输入低电平&#xff0c;【OA1 OB1…