springboot整合sentinel和对feign熔断降级

news2024/9/29 12:58:35

一、准备

  • docker安装好sentinel-dashboard(sentinel控制台),参考docker安装好各个组件的命令
  • 启动sentinel-dashboard,我的虚拟机ip为192.168.200.131,sentinel-dashboard的端口为8858

二、整合sentinel的主要工作

  • 在需要监控的服务中引入spring-cloud-starter-alibaba-sentinel依赖
  • bootstrap.yml中设置好sentinel-dashboardip:port

在我的项目中,给order-serviceproduct-service都引入了sentinel

# pom.xml
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

# bootstrap.yml
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.200.131:8858

三、查看sentinel控制台

  • 启动两个服务
  • docker启动sentinel控制台
    • 浏览器输入:http://192.168.200.131:8858/
    • 输入默认账号密码都是sentinel

刚开始控制台左边只能看到sentinel-dashboard,只有当我们第一次访问过后,相应的服务和请求才会在左边(和簇点链路)中出现

在这里插入图片描述

四、控制台基础功能

4.1 流量控制

4.2 熔断降级

4.2.1 当未配置熔断降级功能时

product-service/product/getByObj限流为QPS=10,超过10则迅速失败

在这里插入图片描述使用jmeter进行压测,QPS为20,访问接口为http://127.0.0.1:8081/order/get2,发现20个请求里有10个请求访问失败,浏览器报500错误

在这里插入图片描述
此外,idea控制台报异常

feign.FeignException$TooManyRequests: [429] during [POST] to [http://product-service/product/getByObj] [IProductClient#getByObj(ProductDTO)]: [Blocked by Sentinel (flow limiting)]

sentinel控制台显示有10个请求被拒绝

在这里插入图片描述

4.2.1 给IProductClient配置熔断降级功能

IProductClient这个feign接口为例,当这个接口对应的http请求被限流阻断时,启用一个新的IProductClient对服务进行降级(实际项目中比如:"当前请求繁忙,请稍后访问"或者推荐别的页面)。
步骤如下:

  • sd-api模块的com.hdl.api.client.product包下建一个fallback包,用来存放feignclient的请求调用被熔断时降级处理的类
  • 在该包下建ProductClientFallback
  • IProductClient@FeignClient注解上配置fallbackFactory = ProductClientFallback.class 【1】
  • 需要将ProductClientFallback类放入ioc容器【2】,因此在com.hdl.api.config包下建一个FallbackConfig,用来生产ProductClientFallbackbean,同时将FallbackConfig放到·spring.factories·文件里
  • order-serviceproduct-service模块的bootstrap.yml中配置feign.sentinel.enabled=true【3】

结构如下
在这里插入图片描述
sd-api模块不需要引入sentinel依赖,ProductClientFallback类代码如下:

@Slf4j
public class ProductClientFallback implements FallbackFactory<IProductClient> {
    @Override
    public IProductClient create(Throwable cause) {
        log.error("查询product服务异常",cause);
        return new IProductClient() {
            @Override
            public ProductDTO getById(Integer id, Integer price) {
                ProductDTO productDTO = new ProductDTO();
                productDTO.setName("getById的默认product");
                return productDTO;
            }

            @Override
            public ProductDTO getByObj(ProductDTO productDTO) {
                ProductDTO productDTO1 = new ProductDTO();
                productDTO.setName("getByObj的默认product");
                return productDTO1;
            }

            @Override
            public ProductDTO getByParams(ProductDTO productDTO, Integer price) {
                ProductDTO productDTO2 = new ProductDTO();
                productDTO.setName("getByParams的默认product");
                return productDTO2;
            }
        };
    }
}

其它两个模块结构
在这里插入图片描述

测试
sentinel限流qps为10
在这里插入图片描述

使用jmeter进行压测,QPS为20,访问接口为http://127.0.0.1:8081/order/get2,发现20个请求里虽然超过了限流但,返回全都成功了,并且熔断的feign走的fallback返回的是默认的null
在这里插入图片描述

idea控制台打印出了fallback类的日志,并且有异常

在这里插入图片描述

feign.FeignException$TooManyRequests: [429] during [POST] to [http://product-service/product/getByObj] [IProductClient#getByObj(ProductDTO)]: [Blocked by Sentinel (flow limiting)]

sentinel控制台通过了12个(跟限流的10差不多),拒绝了8个
在这里插入图片描述

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

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

相关文章

LeetCode讲解篇之53. 最大子数组和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 该问题我们可以转换为求以i为最后一个元素的0 ~ i范围内的最大子数组和&#xff0c;然后其中的所有的最大子数组和的最大值就是我们要返回的答案 题解代码 func maxSubArray(nums []int) int {ans : nums[0]for i : 1;…

PID控制算法(六)

#include <stdio.h> #include <stdlib.h>// 定义PID结构体 typedef struct {float SetSpeed;float ActualSpeed;float err;float integral;float vo_out; //控制器输出float err_last;float Kp;float Ki;float Kd;float limit_min; // 输出限制最小值flo…

基于php的酒店管理系

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

毕业设计——小程序项目的完整原型设计

作品详情 完整短剧项目的需求文档&#xff0c;包括小程序项目的完整原型设计&#xff0c;数据指标体系与埋点规划&#xff0c;会员系统、剧集播放解锁、充值支付等逻辑设计。 项目文档链接&#xff1a;https://axhub.im/ax10/b224d75a2ea99a8b/#g1

校园跑腿圈子论坛社团小程序APP需要多少钱

校园跑腿圈子论坛社团小程序APP的开发费用因多种因素而异&#xff0c;包括功能需求、设计需求、开发团队规模和技术难度等。以下是对这些因素的详细分析以及大致的费用估算&#xff1a; 一、功能需求 校园跑腿小程序的基本功能可能包括用户注册登录、任务发布与接单、实时聊天…

gitee公钥设置、创建库及使用

简介 一、如何安装git 使用gitee&#xff0c;需要先安装git工具。 工具网站地址&#xff1a;https://git-scm.com/downloads 安装完成后&#xff0c;在terminal命令行输入git --version可以查看到git的版本。 二、登录gitee 我们先在 gitee上注册账号并登录。gitee官网&#x…

告别“军备竞赛”!L2进入下沉普及周期,谁在领跑本土方案市场?

随着智能驾驶普及进入20万元以下价位区间&#xff0c;“军备竞赛”模式不再成为主流。尤其是成本占比权重更加突出&#xff0c;取消激光雷达、算力降维以及高低配策略&#xff0c;成为「新常态」。 8月27日&#xff0c;小鹏MONA M03正式上市&#xff0c;22天后&#xff0c;新车…

828华为云征文|部署高性能个人博客系统 VanBlog

828华为云征文&#xff5c;部署高性能个人博客系统 VanBlog 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 VanBlog3.1 VanBlog 介绍3.2 VanBlog 部署3.3 VanBlog 使用 四…

中腾国际团餐产业集团经验谈:如何让上海央厨配送更高效、更安心

上海作为国际大都市&#xff0c;近些年对餐饮行业的效率与品质提出了更高要求。中央厨房(央厨)以其规模化、标准化生产的优势&#xff0c;成为提升餐饮供应链效率的关键一环。而央厨配送&#xff0c;作为连接央厨与消费者的重要桥梁&#xff0c;其重要性不言而喻。中腾国际团餐…

2024年双十一值得入手好物?2024年双十一必买清单!

双十一的号角已经吹响&#xff0c;你是否还在为买什么而纠结&#xff1f;快来看看这份2024年双十一必买清单&#xff01;这里汇聚了各类令人惊喜的好物&#xff0c;从科技新宠到生活必备&#xff0c;总有一款能打动你的心&#xff01; 一、真1000w配置——西圣find可视挖耳勺 …

实在智能:创业需找准“切口” 并着力做深做透

如今&#xff0c;随着人工智能产业的爆发&#xff0c;大量专注于这一领域的初创企业不断涌现。尽管这种多元化的创新生态为产业发展注入了新的活力&#xff0c;但也不可避免的为初创企业带来了诸多压力和挑战。 浙江实在智能科技有限公司(以下简称“实在智能”)作为一家成立6年…

大模型开发 - 一文搞懂Fine-tuning(大模型微调)

本文将从Fine-tuning的本质、Fine-tuning的原理Fine-tuning的应用三个方面&#xff0c;带您一文搞懂大模型微调&#xff1a;Fine-tuning Fine-tuning&#xff08;微调&#xff09;&#xff1a;通过特定领域数据对预训练模型进行针对性优化&#xff0c;以提升其在特定任务上的性…

别人做谷歌seo凭什么比你好?

谷歌SEO的竞争激烈&#xff0c;做得好的才能占据排名。但为什么有些人做SEO就是比你好&#xff1f;其中一个关键因素就是资源投入。SEO的核心包括技术优化、内容质量和外链建设等。这些方面都需要专业知识和时间投入&#xff0c;但如果资源有限&#xff0c;你的优化效果就会受到…

NVM:nvm list available命令执行异常

一、异常图片 二、解决 在nvm的安装位置找到文件settings.txt&#xff0c;修改镜像地址 node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/ 再次执行 三、相关知识 3.1 nvm简介 NVM&#xff08;Node Version Manager&#…

huggingface使用国内镜像站下载

huggingface使用国内镜像站下载 huggingface开源的模型托管仓库&#xff0c;预训练模型的数量已超过30万个&#xff0c;并且任何模型在下载之前都可以使用huggingface提供的spaces空间去测试效果 huggingface的国内镜像站HF-Mirror的地址&#xff1a;https://hf-mirror.com/ …

聊聊JIT是如何影响JVM性能的!

文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 我们知道Java虚拟机栈是线程…

pwn练习(1)

[BJDCTF 2020]babystack2.0 p.sendline(-1): 通过之前建立的连接&#xff0c;向服务器发送字符串"-1"和一个换行符。这可能是为了触发某个特定的行为或条件。 from pwn import* premote(node4.anna.nssctf.cn,28575) p.sendline(-1) payloadbA*(0X108)p64(0x40072A) …

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 主页 注册页面 师资力量界面 个…

十个最好看的桌面屏保 最好用的桌面屏保软件推荐

屏保是指在计算机长时间空闲时自动启动的一种程序&#xff0c;屏保作用可以保护你的屏幕隐私&#xff0c;屏保还可以起到美化作用。今天小编给大家带来最酷最好看的十个桌面电脑屏保&#xff1a;芝麻时钟&#xff08;下载地址&#xff1a;https://clock.zhimasoft.cn/?bili &a…

汽车总线之---- LIN总线

Introduction LIN总线的简介&#xff0c;对于传统的这种点对点的连接方式&#xff0c;我们可以看到ECU相关的传感器和执行器是直接连接到ECU的&#xff0c;当传感器和执行器的数量较少时&#xff0c;这样的连接方式是能满足要求的&#xff0c;但是随着汽车电控功能数量的不断增…