Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】

news2025/1/22 17:42:01

在这里插入图片描述

一、Sentinel整合openfeign

1、复制一下order-openfeign项目(创建order-openfeign-sentinel)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后在stock-nacos当中编写对应的接口
在这里插入图片描述

    @RequestMapping("/reduct2")
    public String reduct2(){
        int a = 1/0;

        System.out.println("扣减库存");
        return "扣减库存:"+port;
    }

在order-openfeign-sentinel当中编写对应的调用微服务的业务逻辑
在这里插入图片描述

@FeignClient(name = "stock-service",path = "/stock",configuration = FeignConfig.class)
public interface StockFeignService {
    @RequestMapping("/reduct2")
    public String reduct2();

}

编写对应的接口调用微服务
在这里插入图片描述

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private StockFeignService stockFeignService;

    @RequestMapping("/add")
    public String add(){
        return stockFeignService.reduct2();
    }
}

完善一下配置文件
在这里插入图片描述
运行项目
在这里插入图片描述
在这里插入图片描述
访问:http://localhost:8041/order/add

在这里插入图片描述

2、Sentinel整合openfeign

引入Sentinel依赖

        <!--Sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Component
public class StockFeignServiceFallback implements StockFeignService{
    @Override
    public String reduct2() {
        return "降级啦!!";
    }
}

在这里插入图片描述


/*
*
* 2、添加feign接口和方法
* name 指定调用rest接口所对应的服务名
* path 指定调用的rest接口所在的StockController指定的@RequestMapping
* */
@FeignClient(name = "stock-service",path = "/stock",fallback = StockFeignServiceFallback.class)
public interface StockFeignService {
    @RequestMapping("/reduct2")
    public String reduct2();

}

配置yml
在这里插入图片描述

feign:
  sentinel:
    # openfeign 整合sentinel
    enabled: true

在这里插入图片描述
访问:http://localhost:8041/order/add
在这里插入图片描述
在这里插入图片描述

二、热点参数限流【热点识别流控】

何为热点?热点即经常访问的数据。

很多时候我们希望统计某个热点数据中访问频次最高的数据,并对其访问进行限制。

比如:
在这里插入图片描述
可以在方法上对指定传入的参数做限流

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
在这里插入图片描述

注意:
1.热点规则需要使用@SentinelResource("resourceName")注解,否则不生效
2.参数必须是7种基本数据类型才会生效
测试用例
在这里插入图片描述

    @RequestMapping("/get/{id}")
    @SentinelResource(value = "getById",blockHandler = "HotBlockHandler")
    public String getById(@PathVariable("id")  Integer id){
        System.out.println("正常访问");
        return "正常访问";
    }
    public String HotBlockHandler(@PathVariable("id")  Integer id, BlockException e){
        return "热点异常处理";
    }
}

对上述id参数进行流控
访问:http://localhost:8041/order/get/1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
不断访问:http://localhost:8041/order/get/1
在这里插入图片描述
我们访问id为2 的
不断访问:http://localhost:8041/order/get/2
无论怎样访问依旧是正常
在这里插入图片描述

三、Sentinel控制台规则配置详解

1、系统规则

在这里插入图片描述
Sentinel系统自适应限流从整体维度对应用入口流量进行控制,结合应用的Load、CPU使用率、总体平均RT、入口QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入
口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

  • Load自适应(仅对Linux/Unis-like机器生效)∶系统的load1作为启发指标,进行自适应系统保护。当系统load1超过设定的启发值,且系统当前的并发线程数超过估
    算的系统容量时才会触发系统保护(BBR阶段)。系统容量由系统的maxOps * minRt估算得出。设定参考值一般是CPU cores * 2.5
    https://www.cnblogs.com/gentlemanhai/p/8484839.html

2、CPU usage (1.5.0+版本)︰当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0),比较灵敏。

在这里插入图片描述

在这里插入图片描述
不断访问
在这里插入图片描述

3、平均RT:当单台机器上所有入口流量的平均RT达到阈值即触发系统保护,单位是毫秒。

4、并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护

2.0x

5、入口QPS:当单台机器上所有入口流量的QPS达到阈值即触发系统保护。

在这里插入图片描述
在这里插入图片描述
访问:http://localhost:8041/order/get/1
在这里插入图片描述
不断访问
在这里插入图片描述

四、Sentinel持久化

1、Sentinel持久化模式

Sentinel规则的推送有下面三种模式:
在这里插入图片描述

1.1 原始模式

如果不做任何修改,Dashboard的推送规则方式是通过API将规则推送至客户端并直接更新到内存中:
在这里插入图片描述
这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。

1.2 拉模式

pll模式的数据源(如本地文件、RDBMS等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至tansport的WritableDataSourceRegistry 中。

1.3 推模式

生产环境下一般更常用的是push模式的数据源。

对于push模式的数据源,如远程配置中心(Zookeeper Nocos,Apole等等),推送的操作不应由Sentinel客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。

因此推送规则正确做法应该是配置中心控制台/Sentiel控制台→配置中心→ Sentinel数据源→Sentinel

而不是经Sentinel数据源推送至配置中心。这样的流程就非常清晰了︰

1.3.1 基于Nacos配置中心控制台实现推送
<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

nacos配置中心中配置流控规则

1.3.2 配置nacos

http://192.168.180.128:8849/nacos/#/configurationManagement?dataId=&group=&appName=&namespace=&pageSize=&pageNo=

在这里插入图片描述

[
    {
        "resource": "/order/flow",
        "controlBehavior": 0,
        "count": 10.0,
        "grade": 1,
        "limitApp": "default",
        "startegy": 0
    }
]

在这里插入图片描述

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--sentinel启动器-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
    </dependencies>

设置对应的配置文件
在这里插入图片描述

server:
  port: 8861
spring:
  application:
    name: order-sentinel
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8858
      web-context-unify: false #默认将调用链路收敛
      datasource:
        flow-rule:
          nacos:
            server-addr: 192.168.180.128:8849
            username: nacos
            password: nacos
            dataId: order-sentinel-flow-rule
            rule-type: flow

访问:http://127.0.0.1:8861/order/flow
在这里插入图片描述
不断连续点击访问
在这里插入图片描述

我们可以看到
http://127.0.0.1:8858/#/dashboard/flow/order-sentinel

sentinel被持久化了
在这里插入图片描述

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

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

相关文章

聊聊spring项目中如何动态刷新bean

前言 前阵子和朋友聊天&#xff0c;他手头上有个spring单体项目&#xff0c;每次数据库配置变更&#xff0c;他都要重启项目&#xff0c;让配置生效。他就想说有没有什么办法&#xff0c;不重启项目&#xff0c;又可以让配置生效。当时我就跟他说&#xff0c;可以用配置中心&a…

AArch64内存模型

概述 本指南介绍了 Armv8‑A 和 Armv9‑A 中的内存属性/特性。首先解释内存的属性从何而来&#xff0c;以及如何将其分配给内存区域。然后介绍不同的属性&#xff0c;以及内存访问顺序的基础知识。 这些信息对于底层&#xff08;例如启动代码或驱动程序&#xff09;开发人员都…

windows上奇怪的dump指向

1. CPP_EXCEPTION_e06d7363_pcl_filters.dll 百度后发现 e06d7363可能是杀毒软件把pcl的依赖库当成病毒&#xff0c;加到白名单即可。 修复未知软件异常错误代码0xe06d7363-回忆主机

Python实现自动关键词提取

随着互联网的发展&#xff0c;越来越多的人喜欢在网络上阅读小说。本文将通过详细示例&#xff0c;向您介绍如何使用Python编写爬虫程序来获取网络小说&#xff0c;并利用自然语言处理技术实现自动文摘和关键词提取功能。 1. 网络小说数据抓取 首先&#xff0c;请确保已安装必…

2023-08-29 LeetCode(带因子的二叉树)

2023-08-29每日一题 一、题目编号 823. 带因子的二叉树二、题目链接 点击跳转到题目位置 三、题目描述 给出一个含有不重复整数元素的数组 arr &#xff0c;每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树&#xff0c;每个整数可以使用任意次数。其中&#xff1a;每…

Android 之 传感器专题 (2) —— 方向传感器

本节引言&#xff1a; 在上一节中我们中我们对传感器的一些基本概念进行了学习&#xff0c;以及学习了使用传感器的套路&#xff0c; 本节给大家带来的传感器是方向传感器的用法&#xff0c;好的&#xff0c;开始本节内容~ 1.三维坐标系的概念&#xff1a; 在Android平台中&a…

60个令人兴奋的ThreeJS网站示例

60个令人兴奋的ThreeJS网站示例 Three.js是一个JavaScript库&#xff0c;它使在Web上创建3D图形比直接使用WebGL容易得多。Three.js是网络上最受欢迎的3D JavaScript库&#xff0c;很容易上手。因此&#xff0c;在这篇文章中&#xff0c;我将展示一些创意网站的例子&#xff0…

数据分析师初级—中级—高级,每个阶段都需要学习什么?

先你需要看下这张图&#xff0c;这是一张数据分析师能力体系图&#xff1a; 通过图片&#xff0c;我们可以比较清晰的看到这三个阶段的数据分析师在各方面能力的差别了&#xff0c;那下面我们就来具体侃侃他们的区别。 初级水平 什么是初学者&#xff1f;如果解析学和数据科…

基于大语言模型知识问答应用落地实践 – 知识库构建(下)

上篇介绍了构建知识库的大体流程和一些优化经验细节&#xff0c;但并没有结合一个具体的场景给出更细节的实战经验以及相关的一些 benchmark 等&#xff0c;所以本文将会切入到一个具体场景进行讨论。 目标场景&#xff1a;对于 PubMed 医疗学术数据中的 1w 篇文章进行知识库构…

Autoware.universe部署04:universe传感器ROS2驱动

文章目录 一、激光雷达驱动二、IMU驱动2.1 上位机配置4.2 IMU校准4.3 安装ROS驱动 三、CAN驱动四、相机驱动4.1 安装驱动4.2 修改相机参数 五、GNSS驱动 本文介绍了 Autoware.universe 各个传感器ROS2驱动&#xff0c;本系列其他文章&#xff1a; Autoware.universe部署01&…

tensorrtx部署yolov5 6.0

文章目录 一. yolov5 v6.0训练模型二.训练好的yolov5模型转tensorrt引擎 一. yolov5 v6.0训练模型 官网下载yolov5 v6.0代码 下载官方预训练好的模型 安装yolov5所需要的库文件&#xff0c;requirements.txt在下载好的yolov5源代码中有 pip install -r C:\Users\10001540…

基于S参数的稳定性分析

目录 1、一些常数的定义2、负载稳定性区域3、结束语 1、一些常数的定义 在基于S参数讨论网络的稳定性之前&#xff0c;首先定义几组常数&#xff0c;如下&#xff1a; 无条件稳定&#xff1a;对于任意的|ГL|<1&#xff0c;|ГS|<1&#xff0c;则一定有|Гin|<1&am…

Linux基础(一)

1.操作系统概念 人与计算机交流的中介 管理和控制计算机中硬件和软件资源 处于上层应用程序和底层硬件之间的软件平台 2.操作系统组成 内核&#xff1a;直接控制管理硬件 内核直接识别计算机二进制语言 解释器&#xff1a;把c c java python等语言解释成二进制&#xff…

闲人闲谈PS之四十六——网络生产全流程

惯例闲话&#xff1a;下半年已开始块行情似乎又是一波大涨&#xff0c;很多朋友委托我介绍PS顾问&#xff0c;很多朋友已经上了能源系统项目&#xff0c;这就造成装备制造的PS又是极度紧缺&#xff0c;rate也还可以&#xff0c;搞的自己也有点心痒痒。这种逆势大涨&#xff0c;…

Python读取Windows注册表的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

聚观早报|我国网民规模达10.79亿人;比亚迪冲进人形机器人赛道

【聚观365】8月29日消息 我国网民规模达10.79亿人 比亚迪冲进人形机器人赛道 新岚图FREE上市一周订单突破1.1万辆 SpaceX龙飞船成功与国际空间站对接 三星电子将在德国和日本举办晶圆代工论坛 我国网民规模达10.79亿人 中国互联网络信息中心&#xff08;CNNIC&#xff09…

【2023中国算力大会】《中国综合算力指数(2023年)》出炉,宁夏“资源环境”位列全国第1,“算力”跃入Top10

2023年8月18日-19日&#xff0c;2023中国算力大会在宁夏银川举行&#xff0c;本届大会以“算领新产业潮流 力赋高质量发展”为主题&#xff0c;打造“主题论坛、成果展示、产业推介、先锋引领”四大核心内容&#xff0c;全面展示算力产业发展最新成果&#xff0c;为产业各方搭建…

Android 蓝牙开发(一)

蓝牙简介 蓝牙&#xff08;Bluetooth&#xff09;是一种无线技术标准&#xff0c;能够在短距离内实现设备之间的数据交换和通信。蓝牙技术最初由瑞典爱立信公司于1994年开发&#xff0c;其名称源自丹麦国王哈拉尔布吕特的译名“Harald Bluetooth”&#xff0c;他曾统一了斯堪的…

R语言空气污染数据的地理空间可视化和分析:颗粒物2.5(PM2.5)和空气质量指数(AQI)...

原文链接&#xff1a;http://tecdat.cn/?p23800 由于空气污染对公众健康的不利影响&#xff0c;人们一直非常关注。世界各国的环境部门都通过各种方法&#xff08;例如地面观测网络&#xff09;来监测和评估空气污染问题&#xff08;点击文末“阅读原文”获取完整代码数据&…

Spring Security存在认证绕过漏洞 CVE-2021-22096

文章目录 0.前言1.参考文档2.基础介绍漏洞影响范围&#xff1a;官方说明&#xff1a;修复版本&#xff1a;漏洞利用步骤&#xff1a;修复方式&#xff1a; 3.解决方案 0.前言 背景&#xff1a;项目被扫到Spring Boot 的漏洞&#xff0c;严格的说应该是Spring Security 组件的漏…