Sentinel 流量控制框架

1. Sentinel 是什么?
Sentinel是由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。

2. 主要优势和特性
轻量级,核心库无多余依赖,性能损耗小。
方便接入,开源生态广泛。
丰富的流量控制场景。
易用的控制台,提供实时监控、机器发现、规则管理等能力。
完善的扩展性设计,提供多样化的 SPI 接口,方便用户根据需求给 Sentinel 添加自定义的逻辑。

3、Sentinel、Hystrix、Resilience4j的异同
在这里插入图片描述

4、怎么安装和启动Dashboard

github地址https://github.com/alibaba/Sentinel/releases
wget -P /opt/downloads https://github.com/alibaba/Sentinel/releases/download/1.6.0/sentinel-dashboard-1.7.1.jar
mkdir /opt/sentinel-dashboard
cp /opt/downloads/sentinel-dashboard-1.7.1.jar /opt/sentinel-dashboard/sentinel-dashboard-1.7.1.jar

启动:java -Dserver.port=8718 -jar sentinel-dashboard-1.7.1.jar

在这里插入图片描述
在这里插入图片描述
账号密码 sentinel sentinel
在这里插入图片描述
在这里插入图片描述
5、集成代码:

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.bc.sentinel</groupId><artifactId>sentinel-study</artifactId><version>1.0-SNAPSHOT</version><modules><module>sentinel-provider</module><module>sentinel-consumer-01</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version></parent><properties><!-- Spring Cloud Hoxton.SR8 依赖 --><spring-cloud.version>Hoxton.SR8</spring-cloud.version><!-- spring cloud alibaba 依赖 --><spring-cloud-alibaba.version>2.2.4.RELEASE</spring-cloud-alibaba.version></properties><dependencies><!-- lombok 工具通过在代码编译时期动态的将注解替换为具体的代码,IDEA 需要添加 lombok 插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.11</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.0</version></dependency><!-- 引入jwt--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.10.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.10.5</version><scope>runtime</scope></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.10.5</version><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency></dependencies><!-- 项目依赖管理 父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息) --><dependencyManagement><dependencies><!-- spring cloud 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud alibaba 依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><!-- 配置远程仓库 --><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>sentinel-study</artifactId><groupId>org.bc.sentinel</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><packaging>jar</packaging><artifactId>sentinel-provider</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 服务注册  服务发现需要引入的 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--健康监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--Nacos 配置中心依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--Sentinel 组件依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--sentinel持久化 访问nacos数据源的依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!--集群流控客户端依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-client-default</artifactId></dependency><!--集群流控服务端依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-server-default</artifactId></dependency></dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>sentinel-study</artifactId><groupId>org.bc.sentinel</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><packaging>jar</packaging><artifactId>sentinel-consumer-01</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 服务注册  服务发现需要引入的 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--健康监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--Nacos 配置中心依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--Sentinel 组件依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--sentinel持久化 访问nacos数据源的依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency></dependencies><build><plugins><!-- spring boot打包--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><configuration><mainClass>com.springcloudalibaba.sentinel.SentinelConsumerApplication</mainClass> <!--也可以不指定MainClass,一般能自动识别--></configuration><goals><goal>repackage</goal> <!--依赖包装入jar包--></goals></execution></executions></plugin></plugins></build>
server:port: 8082 #程序端口号
spring:application:name: sentinel-provider #应用名称cloud:sentinel:transport:port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用  如果被占用则从8719依次+1扫描dashboard: 127.0.0.1:8718 # 指定仪表盘地址nacos:discovery:server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址config:server-addr: 127.0.0.1:8848 #nacos配置中心地址file-extension: yml #指定配置内容的数据格式
management:endpoints:web:exposure:include: '*' #公开所有端点
server:port: 8081 #程序端口号
spring:application:name: sentinel-consumer-01 #应用名称cloud:sentinel:datasource:ds1:  # ds1是自己取得名字nacos: #表示使用nacosserver-addr: 127.0.0.1:8848 # nacos 服务地址dataId: sentinel-consumer-ds1  #nacos dataIdgroupId: DEFAULT_GROUP  #  分组 默认分组data-type: json  # 数据类型 jsonrule-type: flow  #flow 表示流控规则ds2:  # ds2是自己取得名字nacos: #表示使用nacosserver-addr: 127.0.0.1:8848 # nacos 服务地址dataId: sentinel-consumer-ds2  #nacos dataIdgroupId: DEFAULT_GROUP  # 分组 默认分组data-type: json  # 数据类型 jsonrule-type: degrade  #degrade 表示流控规则ds3:  # ds3是自己取得名字nacos: #表示使用nacosserver-addr: 127.0.0.1:8848 # nacos 服务地址dataId: sentinel-consumer-ds3  #nacos dataIdgroupId: DEFAULT_GROUP  # 分组 默认分组data-type: json  # 数据类型 jsonrule-type: system  #system 表示系统规则transport:port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用  如果被占用则从8719依次+1扫描dashboard: 127.0.0.1:8718 # 指定仪表盘地址nacos:discovery:server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址config:server-addr: 127.0.0.1:8848 #nacos配置中心地址file-extension: yml #指定配置内容的数据格式
management:endpoints:web:exposure:include: '*' #公开所有端点

在这里插入图片描述

package org.bc.sentinel.controller;import org.apache.commons.lang3.RandomUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController // @RestController注解是@Controller+@ResponseBody
public class TestController {@RequestMapping("/test")  // 标记是该方法是接口请求public String test() {return "sentinel-provider-test() " + RandomUtils.nextInt(0,1000);}
}
package org.bc.sentinel.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;@RestController // @RestController注解是@Controller+@ResponseBody
public class TestController {private final String SERVER_URL = "http://sentinel-provider"; // 这里的服务地址填写注册到Nacos的应用名称@Resourceprivate RestTemplate restTemplate;@RequestMapping("/test")  // 标记是该方法是接口请求public String test() {return restTemplate.getForObject(SERVER_URL + "/test", String.class);//调用提供者/test接口}@RequestMapping("/sentinelTest")public String sentinelTest() {  // sentinel组件测试方法// int i = 1 / 0; // 除数不能为0 ,此处必报错return "TestController#sentinelTest " + RandomUtils.nextInt(0, 10000);}@RequestMapping("/sentinelTestB")public String sentinelTestB() {  // sentinel组件测试方法return "TestController#sentinelTestB " + RandomUtils.nextInt(0, 10000);}@RequestMapping("/sentinelTestC")public String sentinelTestC() {  // sentinel组件测试方法return "TestController#sentinelTestC " + RandomUtils.nextInt(0, 10000);}/*   @RequestMapping("/sentinelTest")public String sentinelTest() {  // sentinel组件测试方法return "TestController#sentinelTest " + RandomUtils.nextInt(0, 10000);}*//*   @RequestMapping("/sentinelTest")public String sentinelTest() {  // sentinel组件测试方法try {Thread.sleep(1000); // 睡眠1 秒} catch (InterruptedException e) {e.printStackTrace();}return "TestController#sentinelTest " + RandomUtils.nextInt(0, 10000);}*/}
package org.bc.sentinel.conf;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration // 标记是配置类
public class GenericConfiguration { // 常规配置类@LoadBalanced // 标注此注解后,RestTemplate就具有了客户端负载均衡能力@Beanpublic RestTemplate restTemplate(){ // 创建RestTemplate,并交个Spring容器管理return new RestTemplate();}
}

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

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

相关文章

AI篇-chatgpt基本用法(文心一言也适用)

目录 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;例子1-文章摘要 &#xff08;3&#xff09;例子2-代码生成 &#xff08;4&#xff09;文心一言链接 &#xff08;1&#xff09;基本规则 相比于搜索引擎&#xff0c;ChatGPT的优势在于其高效的想法关联和…

《CTFshow-Web入门》09. Web 81~90

Web 入门 索引web81题解 web82题解原理 web83题解 web84题解 web85题解 web86题解 web87题解原理 web88题解 web89题解 web90题解 ctf - web入门 索引 web81&#xff1a;include() 利用&#xff0c;一句话木马之 Nginx 日志利用。web82~86&#xff1a;include() 利用&#xff…

WebSocket--技术文档--基本概念--《快速了解WebSocket协议》

阿丹&#xff1a; 不断学习新技术&#xff0c;丰富自己了解更多才能扩展更多世界可能。 官网 WebSocket首页、文档和下载 - HTML5开发相关 - OSCHINA - 中文开源技术交流社区 软件简介 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebS…

力扣|找出和所对应的两数的下标

从零开始刷力扣&#xff08;bushi 题目放在这&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

linux上vscode中.cpp文件中引入头文件.hpp时报错:找不到头文件(启用错误钵形曲线)

当在.cpp文件中引入系统给定的头文件时&#xff1a;#include < iostream > 或者引入自定义的头文件 &#xff1a;#include <success.hpp> 报错&#xff1a;找不到相应的头文件&#xff0c;即在引入头文件的改行底下标出红波浪线 解决方法为&#xff1a; &#…

linux入门---动静态库的加载

目录标题 为什么会有动态库和静态库静态库的实现动态库的实现动静态库的加载 为什么会有动态库和静态库 我们来模拟一个场景&#xff0c;首先创建两个头文件 根据文件名便可以得知add.h头文件中存放的是加法函数的声明&#xff0c;sub.h头文件中存放的是减法函数的声明&#…

文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…

25 Linux可视化-Webmin和bt运维工具

25 Linux可视化-Webmin和bt运维工具 文章目录 25 Linux可视化-Webmin和bt运维工具25.1 Web运行环境简介25.2 Webmin的安装及使用25.2.1 安装webmin25.2.2 Webmin使用演示 25.3 bt(宝塔)的安装及使用25.3.1 安装宝塔25.3.2 宝塔Web登录Linux服务器25.3.3 找回宝塔登录密码 学习视…

Chrome 和 Edge 上出现“status_breakpoint”错误解决办法

文章目录 STATUS_BREAKPOINTSTATUS_BREAKPOINT报错解决办法Chrome浏览器 Status_breakpoint 错误修复- 将 Chrome 浏览器更新到最新版本- 卸载不再使用的扩展程序和应用程序- 安装计算机上可用的任何更新&#xff0c;尤其是 Windows 10- 重启你的电脑。 Edge浏览器 Status_brea…

iOS实时监控与报警器

在现代信息化社会中&#xff0c;即使我们不在电脑前面也能随时获取到最新的数据。而苹果公司提供的iOS推送通知功能为我们带来了一种全新的方式——通过手机接收实时监控和报警信息。 首先让我们了解一下iOS推送通知。它是一个强大且灵活可定制化程度高、适用于各类应用场景&a…

基于沙猫群算法优化的BP神经网络(预测应用) - 附代码

基于沙猫群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于沙猫群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.沙猫群优化BP神经网络2.1 BP神经网络参数设置2.2 沙猫群算法应用 4.测试结果&#xff1a;5.Matlab代…

论文研读|生成式跨模态隐写发展综述

前言&#xff1a;本文介绍近5年来生成式跨模态隐写领域的相关工作。 相关阅读&#xff1a;生成式文本隐写发展综述 不同于文本隐写&#xff0c;跨模态隐写需要考虑不同模态间的相关性&#xff0c;常见的跨模态场景有&#xff1a;Image-to-Text&#xff08;如图像描述&#xff…

【Python】OpenCV安装

安装起来相当简单&#xff0c;但是看到很多博客的安装过程复杂得很。 pip install opencv-python测试代码&#xff1a; import cv2 as cv img cv.imread("f6759b83f3201997fd7ea1c9b9130a44.jpg")cv.imshow("Display window", img) k cv.waitKey(0) # …

ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;二&#xff09; 理解节点&#xff08;node&#xff09;ros2 runros2 node list重映射&#xff08;remap&#xff09;ros2 node info 理解话题&#xff08;topic&#xff09;rqt_graphros2 topic listr…

数据库基础

目录 一、数据库是什么&#xff1f; 二、目前主流的数据库 三、数据库基本使用 1.连接服务器 2.服务器、数据库、表关系 3.使用案例 4、数据逻辑存储 四、MySQL基本知识 1、MySQL架构 2、SQL语句分类 3、存储引擎 总结 一、数据库是什么&#xff1f; 数据库是按照数据结构来组…

Spring源码解析-构造函数

1、构造函数概述 构造函数中&#xff0c;主要创建两个对象分别用来读取注解参数和classpath下的文件 AnnotatedBeanDefinitionReader 专门读取注解参数的Reader ClassPathBeanDefinitionScanner 专门读取classpath下的文件&#xff0c;例如yml、properties等。 AnnotationC…

Unity 切换场景后场景变暗

问题 Unity版本&#xff1a;2019.4.34f1c1 主场景只有UI&#xff0c;没有灯光&#xff0c;天空盒&#xff1b;其他场景有灯光和天空盒所有场景不烘焙主场景作为启动场景运行&#xff0c;切换到其他场景&#xff0c;场景变暗某一个场景作为启动场景运行&#xff0c;光影效果正…

第P3周:天气识别

一、前期准备 1、设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasetsimport os,PIL,pathlibdevice torch.device("cuda" if torch.cuda.is_available() …

【探索Linux】—— 强大的命令行工具 P.7(进程 · 进程的概念)

阅读导航 前言一、冯诺依曼体系结构二、操作系统&#xff08;OS&#xff09;1. 概念 三、进程1. 进程的概念2. PCB&#xff08;Process Control Block&#xff09;3. 查看进程 四、fork函数1. 函数简介2. 调用方式3. 返回值4. 使用示例 五、进程的几种状态1. 状态简介2. 进程状…

sql中的排序函数dense_rank(),RANK()和row_number()

dense_rank()&#xff0c;RANK()和row_number()是SQL中的排序函数。 为方便后面的函数差异比对清晰直观&#xff0c;准备数据表如下&#xff1a; 1.dense_rank() 函数语法&#xff1a;dense_rank() over( order by 列名 【desc/asc】) DENSE_RANK()是连续排序&#xff0c;比如…