Sentinel入门与进阶:微服务流量控制的最佳实践 ( 六 )

news2025/1/5 12:34:14

8.Gateway 整合 Sentinel(熔断、限流)

8.1.引入依赖

在 Spring Cloud Alibaba 2.1.6之前的版本,引入的是 sentinel-spring-cloud-gateway-adapter 包,并且需要自己实现好多配置类,2.1.6 之后的版本内部已经帮我们实现好了,所以使用起来比较简单了。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--2.1.6之前的版本是 adapter 的包,整合比较麻烦,需要写配置类-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

8.2.配置 application.yml

需要 配置的是 gateway 和 sentinel

        
 server:
  port: 19999       
 spring:
  application:
    name: sentinel-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 10001
        group: DEFAULT_GROUP 
    gateway:   #配置gateway
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true  #默认为false,true:开启通过微服务名访问
      routes:
        - id: nacos-route
          uri: lb://nacos-demo
          predicates:
            - Path=/nacosdemo/**
          filters:
            - StripPrefix=1

    sentinel:
      transport:
        dashboard: localhost:8080
      eager: true
      filter:
        enabled: false

8.3.sentinel 启动

sentinel 启动成功后界面发生变化

在这里插入图片描述

8.4.sentinel 配置限流规则

8.4.1.规则配置

以下配置说明:
API 名称:这个相当于一个服务的一个API的唯一ID;
阈值类型:1个 QPS 是完整的一次请求,发出请求并且拿到完成的请求结果;
QPS 阈值:每秒最大的QPS数;
间隔:请求间隔最大时间;
Burst size:宽容次数,比如我配置的是每秒访问3次以上进行流控,如果这个参数设置为 1 ,则每秒访问 4 次以上进行流控。

在这里插入图片描述

8.4.2.测试结果

测试,则返回 429 (429 是 Too Many Request 错误码)。

在这里插入图片描述

8.5.sentinel 配置熔断规则

8.5.1.规则配置

以 异常数 降级来举例
熔断策略:以什么样的策略熔断;
慢调用比例:请求超过最大RT值,比如 1ms;
熔断时长:接口发生异常后熔断时长;
最小请求次数:每秒请求最少的失败次数;
统计时长:在一定的时间段内最少请求 2 次,每个请求超过1ms, 请求数量大于 50%;

在这里插入图片描述

8.5.2.测试结果

测试,则会熔断,返回 DegradeException 异常,降级异常。

在这里插入图片描述

8.6.自定义流控降级异常信息

8.6.1.通过配置类配置

在 SentinelConfig 类中加入 init() 初始化方法(要用 @PostConstruct 注解进行初始化),定义异常处理提示信息即可。

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class SentinelConfig {
    @PostConstruct
    public void init(){
        BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                Map<String, String> result = new HashMap<>();
                result.put("code", HttpStatus.TOO_MANY_REQUESTS.toString());
                result.put("msg", "服务压力过大,请稍后重试!");
                return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS).contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(result));
            }
        };
        GatewayCallbackManager.setBlockHandler(blockRequestHandler);
    }

}

8.6.2.通过application.yml 配置

主要配置 spring.cloud.sentinel.scg.fallback 即可。

 server:
  port: 19999       
 spring:
  application:
    name: sentinel-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 10001
        group: DEFAULT_GROUP 
    gateway:   #配置gateway
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true  #默认为false,true:开启通过微服务名访问
      routes:
        - id: nacos-route
          uri: lb://nacos-demo
          predicates:
            - Path=/nacosdemo/**
          filters:
            - StripPrefix=1

    sentinel:
      transport:
        dashboard: localhost:8080
      eager: true
      filter:
        enabled: false
        
      scg:
        fallback:
          mode: response
          response-body: '{"code":"429 TOO_MANY_REQUEST", "msg":"服务压力过大,请稍后重试!"}'

8.6.3.测试结果

配置服务流控或者降级,阈值设置为1(总之小一点),快速发送请求返回自定义服务流控降级信息。

在这里插入图片描述

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

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

相关文章

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {

计算机网络之分组交换时延的计算

一.类型 分组交换的时延包括一下几种&#xff1a; 1.1发送时延 发送时延&#xff0c;也叫传输时延&#xff0c;结点将分组的所有比特推向链路所需要的时间&#xff0c;即从发送分组的第一个比特算起&#xff0c;到该分组的最后一个比特发送完为止。 发送时延 分组长度 / 发…

Web Image scr图片从后端API获取基本实现

因系统开发中需求&#xff0c;会有页面显示图片直接从后端获取后显示&#xff0c;代码如下&#xff1a; 后端&#xff1a; /*** 获取图片流* param response* param fileName*/RequestMapping(value"getImgStream",method RequestMethod.GET)public void getImgStr…

【JAVA】深入理解守护线程与非守护线程:概念、应用及示例

文章目录 介绍1. 线程的基础知识2. 守护线程与非守护线程2.1 什么是守护线程&#xff1f;特点&#xff1a; 2.2 什么是非守护线程&#xff1f;特点&#xff1a; 3. 为什么需要守护线程&#xff1f;示例&#xff1a;后台任务处理示例&#xff1a;日志记录 4. 非守护线程的应用场…

Scrapy 项目部署问题及解决方案

部署 Scrapy 项目时可能会遇到一些常见问题。以下是几个常见的部署问题及其解决方案&#xff1a; 1、依赖问题 问题&#xff1a;部署后爬虫运行失败&#xff0c;通常是由于缺少依赖库。 2、配置问题 问题&#xff1a;爬虫在部署环境中无法正常运行&#xff0c;可能是由于配…

stm32智能颜色送餐小车(openmv二维码识别+颜色识别+oled显示)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

深度学习基础之反向传播算法

目录 原理与过程 1. 前向传播&#xff08;Forward Pass&#xff09; 2. 计算误差&#xff08;Error Calculation&#xff09; 3. 反向传播&#xff08;Backpropagation&#xff09; 4. 参数更新&#xff08;Parameter Update&#xff09; 应用与实例 总结 反向传播算法…

1秒出图,全球最快的开源Stable Diffusion出炉

前言 OneFlow 将 Stable Diffusion 的推理性能推向了一个全新的 SOTA。 第一辆汽车诞生之初&#xff0c;时速只有 16 公里&#xff0c;甚至不如马车跑得快&#xff0c;很长一段时间&#xff0c;汽车尴尬地像一种“很酷的玩具”。人工智能作图的出现也是如此。 AI 作图一开始的…

大数据面试SQL(八):求连续段的起始位置和结束位置

文章目录 求连续段的起始位置和结束位置 一、题目 二、分析 三、SQL实战 四、样例数据参考 求连续段的起始位置和结束位置 一、题目 有一张表t2_id记录了id&#xff0c;id不重复&#xff0c;但是会存在间断&#xff0c;求出连续段的起始位置和结束位置。 样例数据&…

两个若依系统,不能同时登录问题解决方案

原因&#xff1a; 问题根源在于两个独立的系统&#xff08;A系统与B系统&#xff09;共享了同一cookie键名来存储各自用户的认证令牌&#xff08;token&#xff09;。这种设计导致了以下情形&#xff1a; 当用户在A系统登录后&#xff0c;一个token被存储在cookie中&#xff0…

【LeetCode每日一题】——623.在二叉树中增加一行

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先遍历 二【题目难度】 中等 三【题目编号】 623.在二叉树中增加一行 四【题目描述】…

c语言学习,memset()函数分析

1&#xff1a;memset() 函数说明&#xff1a; 将字符c&#xff08;unsigned char&#xff09;复制到str字符串的前n个字符 2&#xff1a;函数原型&#xff1a; void * memset(void * str,int c,size_t n) 3&#xff1a;函数参数&#xff1a; 参数str要填充的指针,c 要设置的值…

2024下半年EI学术会议一览表

2024下半年将举办多个重要的EI学术会议&#xff0c;涵盖了从机器视觉、图像处理与影像技术到感知技术、绿色通信、计算机、大数据与人工智能等多个领域。 2024下半年EI学术会议一览表 第二届机器视觉、图像处理与影像技术国际会议&#xff08;MVIPIT 2024&#xff09;将于2024…

threejs webgl效果 功能特效

雷达效果 ​飘扬的红旗 光柱效果 OD线 下雪 下雨 光墙效果 能源球 烟火效果 threejs烟花效果 光圈效果 threejs 光圈 波动 function initScene() {scene new THREE.Scene();}function initCamera() {camera new THREE.PerspectiveCamera(45, window.innerWidth / window.inne…

培训学校课程管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

MiniCPM-V 2.6 面壁“小钢炮”,多图、视频理解多模态模型,部署和推理实战教程

MiniCPM-V 2.6是清华和面壁智能最新发布的多模态模型&#xff0c;亦称面壁“小钢炮”&#xff0c;它是 MiniCPM-V 系列中最新、性能最佳的模型。该模型基于 SigLip-400M 和 Qwen2-7B 构建&#xff0c;仅 8B 参数&#xff0c;但却取得 20B 以下单图、多图、视频理解 3 SOTA 成绩…

leetcode300. 最长递增子序列,动态规划附状态转移方程

leetcode300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2…

【扩散模型(七)】Stable Diffusion 3 diffusers 源码详解2 - DiT 与 MMDiT 相关代码(上)

系列文章目录 【扩散模型&#xff08;一&#xff09;】中介绍了 Stable Diffusion 可以被理解为重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xff09;【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视…

“从零开始的HTML 表格”——WEB开发系列09

HTML 表格是一种用于在网页上组织和显示信息的结构性元素&#xff0c;它能够将数据以行和列的形式呈现&#xff0c;帮助用户更清晰地理解数据关系。表格在展示统计数据、产品列表、日程安排等方面非常实用。 一、HTML 表格的基本结构 HTML 表格用 ​​<table>​​ 标签来…

创意无限!2024年热门视频剪辑软件精选

从专业级电影剪辑工具到简单易用的手机APP&#xff0c;再到集创意与高效于一身的桌面应用&#xff0c;各类剪辑软件如雨后春笋般涌现。本文将带你一窥2024年火热的剪辑视频的软件。 1.福昕视频剪辑 连接直达>>https://www.pdf365.cn/foxit-clip/ 这款视频编辑工具凭…