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

在这里插入图片描述

一、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 {@Autowiredprivate 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{@Overridepublic 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 整合sentinelenabled: 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-sentinelcloud:sentinel:transport:dashboard: 127.0.0.1:8858web-context-unify: false #默认将调用链路收敛datasource:flow-rule:nacos:server-addr: 192.168.180.128:8849username: nacospassword: nacosdataId: order-sentinel-flow-rulerule-type: flow

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

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

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

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

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

相关文章

说说Lambda架构

分析&回答 Lambda架构是由Storm的作者Nathan Marz提出的一个实时大数据处理框架。Marz在Twitter工作期间开发了著名的实时大数据处理框架Storm&#xff0c;Lambda架构是其根据多年进行分布式大数据系统的经验总结提炼而成。Lambda架构的目标是设计出一个能满足实时大数据系…

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…

【校招VIP】前端算法考点之大数据相关

考点介绍&#xff1a; 大数据的关键技术分为分析技术和处理技术&#xff0c;可用于大数据分析的关键技术主要包括A/B测试&#xff0c;关联规则挖掘&#xff0c;数据挖掘&#xff0c;集成学习&#xff0c;遗传算法&#xff0c;机器学习&#xff0c;自然语言处理&#xff0c;模式…

Oracle中LEFT JOIN后AND与WHERE的异同

1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 下面以具体例子来说明&#xff1a; (1)、建表及插入测试数据 --建测试表 create table FACT_TAB ( ID INTEGER,STATUS VARCHAR2(8) ); create table DIM_STATUS ( STSTUS_CLASS VARCHAR2(8),STATUS_CODE VARCHAR2(8),S…

Spring框架知识点汇总

01.Spring框架的基本理解 关键字&#xff1a;核心思想IOC/AOP&#xff0c;作用&#xff08;解耦&#xff0c;简化&#xff09;&#xff0c;简单描述框架组成&#xff1b; Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;反转控制&#xff09;和AOP&a…

沐风老师3DMAX厨房橱柜生成器KitchenCabinetGenerator教程

3DMAX厨房橱柜生成器插件使用方法 3DMAX橱柜生成器KitchenCabinetGenerator是一个在3dMax中自动创建三维橱柜模型的高效脚本。它有多种风格的台面、门和橱柜&#xff0c;可以灵活地应用于Archviz项目&#xff0c;同时为3D艺术家节省大量时间。 【适用版本】 1.3dMax2018 – 20…

从零构建深度学习推理框架-10 算子的执行流程

计算图的设计 Graph的结构 Operators: 记录所有的节点Input operator: 指定的输入节点Output operator: 指定的输出节点Global input data: 模型的外部全局输入&#xff08;用户指定的输入&#xff09; Operator的结构 Input data: 节点的输入数据Output data: 节点的输出数…

系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的&#xff0c;因为很多的好朋友也比较关注这方面的内容&#xff0c;所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解&#xff0c;我这里只是抛砖引玉&#xff0c…

ArmSoM-W3 DDR压力测试

1. 简介 专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试&#xff0c;以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W…

任意文件读取

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

字符设备驱动(内核态用户态内存交互)

前言 内核驱动&#xff1a;运行在内核态的动态模块&#xff0c;遵循内核模块框架接口&#xff0c;更倾向于插件。 应用程序&#xff1a;运行在用户态的进程。 应用程序与内核驱动交互通过既定接口&#xff0c;内核态和用户态访问依然遵循内核既定接口。 环境搭建 系统&#…

Maven 基础之安装和命令行使用

Maven 的安装和命令行使用 1. 下载安装 下载解压 maven 压缩包&#xff08;http://maven.apache.org/&#xff09; 配置环境变量 前提&#xff1a;需要安装 java 。 在命令行执行如下命令&#xff1a; mvn --version如出现类似如下结果&#xff0c;则证明 maven 安装正确…

【100天精通python】Day49:python web编程_web框架,Flask的使用

目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3.4 多个路由绑定到一个视图函数 3.3.5 访问URL 参数的路由 3.3.6 带默认值的动态路由 3.3.7 带…

文件读取漏洞复现(Metinfo 6.0.0)

安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&#xff1a; 点击下一步、下一步&#xff0c…

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份&#xff0c;图像中间的舍弃&#xff0c;其他部分图像对应边框的相应区域放置&#xff0c;上右下左四角固定&#xff0c;border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么&#xff1f; redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

spring事务详解

spring事务整体流程&#xff08;图画的不是很细节&#xff0c;但是大体流程体现出来了&#xff09; 一、EnableTransactionManagement工作原理 开启Spring事务本质上就是增加了一个Advisor&#xff0c;但我们使用EnableTransactionManagement注解来开启Spring事务是&#xff…

设计模式-迭代器

文章目录 1. 引言1.1 概述1.2 设计模式1.3 迭代器模式的应用场景1.4 迭代器模式的作用 2. 基本概念2.1 迭代器 Iterator2.2 聚合 Aggregate2.3 具体聚合 ConcreteAggregate 3. Java 实现迭代器模式3.1 Java 集合框架3.2 Java 迭代器接口3.3 Java 迭代器模式实现示例 4. 迭代器模…

打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认

新型物联网实现良好建设的第一要务就是打破信息孤岛&#xff0c;将数据汇聚在平台统一处理&#xff0c;实现数据共享&#xff0c;放大物联终端的行业价值&#xff0c;实现系统开放性&#xff0c;以此营造丰富的行业应用环境。在此背景下&#xff0c;物联感知平台应运而生&#…

BOM对MES管理系统的影响与作用

在建设MES管理系统中&#xff0c;BOM&#xff08;物料清单&#xff09;具有至关重要的作用。它提供了产品的组成部分和结构信息&#xff0c;支持生产过程的监控、协调和管理。本文将详细探讨BOM在MES管理系统中的影响和作用。 一、生产过程指导 BOM为MES系统提供了产品的组成部…