iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringCloud中如何使用Sentinel哨兵组件
  • 186
分享到

SpringCloud中如何使用Sentinel哨兵组件

2023-06-02 10:06:31 186人浏览 泡泡鱼
摘要

这篇文章给大家介绍SpringCloud中如何使用Sentinel哨兵组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、概念描述Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务

这篇文章给大家介绍SpringCloud中如何使用Sentinel哨兵组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1、概念描述

Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。包括核心的独立类库,监控台,丰富的使用场景验证。(这似乎是阿里开源组件的一贯作风,极其有特点,且特点很规律)

基本特性图:

SpringCloud中如何使用Sentinel哨兵组件

补刀一句:这种图很多人可能不在意,但是一般官方给这个图就是该中间件的基本使用思路,与核心功能点。

2、基础性概念

  • 资源管理

资源是Sentinel组件中的核心概念之一。应用服务器上脚本,静态页面,api接口,文件图片等都可以理解为资源,对于Java开发者而言,API接口就是这里资源的概念。

  • 规则配置

Sentinel组件通过流控规则的配置,来指定允许该资源(API接口)通过的请求次数,IP黑白名单,应用服务等。

QPS:每秒查询率,是一台服务器每秒能够处理的查询次数。

TPS:每秒处理事务数,事务处理整体倾向于整个过程。

二、框架环境整合

这里的环境主要整合Nacos注册中心,Feign服务,Sentinel哨兵,和Sentinel控制台。

1、基本依赖

这里的依赖需要参考官方文档,不同的环境使用不同的依赖,这里主要适配springCloud环境,所以使用如下包即可。

<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>    <version>2.1.1.RELEASE</version></dependency>

2、控制台面板

这里直接从GitHub下载一个控制台服务包即可,也可以自己下载源码,按照需求修改后自行打包。

java -jar sentinel-dashboard-1.7.1.jar

下载并启动控制台服务。

3、服务配置

这里主要是把用到的两个服务9001和9002连接到监控台。

spring:  application:    name: node09-nacos-9001  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848      config:        server-addr: 127.0.0.1:8848        file-extension: yaml    sentinel:      transport:        port: 9001        dashboard: localhost:8080

最下面四行文件是哨兵控制台的主要配置,注意刚启动之后控制台是看不到连接的,有资源被触发之后才能看到。(附一张首页效果图)

SpringCloud中如何使用Sentinel哨兵组件

三、流量控制

1、基本描述

流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

2、限流规则

限流规则主要由下面几个因素组成。

  • resource:资源名,即限流规则的作用对象,对于Java服务端开发而言就是执行的方法;

  • count: 限流阈值,单位时间内能按照规则通过的请求量;

  • grade: 限流阈值类型,QPS 或并发线程数 ;

  • limitApp: 流控限制的指定应用来源,若为default则不区分调用来源;

  • strategy: 调用关系限流策略,直连,链路等;

  • controlBehavior: 流量控制效果,直接拒绝、Warm Up、匀速排队;

3、基本案例

  • 硬编码

配置规则

public class FlowRuleConfig {    public static void initFlowQpsRule(String resourceName) {        List<FlowRule> rules = new ArrayList<>();        FlowRule rule = new FlowRule(resourceName);        // 修改这里参数,查看效果        rule.setCount(100);        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);        rule.setLimitApp("default");        rules.add(rule);        FlowRuleManager.loadRules(rules);    }}

该规则参考上面的限流因素,不难理解。

使用方式

@RequestMapping(value = "/WEB/getOrder",method = RequestMethod.GET)public String getOrder (@RequestParam("id") Integer id){    FlowRuleConfig.initFlowQpsRule("getOrder");    Entry entry = null;    try {        // 定义资源,埋点        entry = SphU.entry("getOrder");        // 保护的业务逻辑        return "Order=" + id ;    } catch (Exception e){        e.printStackTrace();    } finally {        if (entry != null){entry.exit();}    }    return "Order Error" ;}

测试的时候修改规则中count值,测试效果明显。

  • 编码简化

SphU.entry中可以设置处理类型,限流阈值。

@RequestMapping(value = "/web/getState",method = RequestMethod.GET)public String getState (@RequestParam("id") Integer id){    Entry entry = null;    try {        entry = SphU.entry("getOrder",EntryType.IN,2);        return "state=" + id;    }    catch (BlockException e){        e.printStackTrace();    } finally {        if (entry != null){entry.exit();}    }    return "State Error" ;}

不过这种模式依旧是代码入侵严重,不太符合现在编程的大趋势。Sentinel支持通过@SentinelResource注解定义资源并配置。

4、测试效果

请求上述的两个测试接口,之后看控制台中9001服务的簇点链路。

SpringCloud中如何使用Sentinel哨兵组件

可以基于控制台实时配置资源的:流控、降级、热点、授权等核心功能,服务重启之后配置也会重置。

四、服务熔断降级

1、注解详解

核心注解SentinelResource

用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

  • value

资源名称,核心概念不能为空;

  • entryType

entry 类型,可选项默认为 EntryType.OUT;

  • blockHandler

对应处理BlockException的函数名称,可选项。blockHandler函数访问范围需要是public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为BlockException。blockHandler函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass为对应的类的Class对象,注意对应的函数必须为 static 函数,否则无法解析。

  • fallback

fallback函数名称,可选项,用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要和原函数一致,或者可以额外多一个;

注意:这里可以这样理解blockHandler和fallback,fallback处理业务逻辑的异常,服务降级,blockHandler处理sentinel组件控制的阻断异常。

2、使用案例

9001接口服务

@Servicepublic class FlowServiceImpl implements FlowService {    @Resource    private JdbcTemplate jdbcTemplate ;    @SentinelResource(value = "getPhone",blockHandler = "exceptionHandler", fallback = "fallback")    @Override    public String getPhone(Integer id) {        String sql = "select phone from d_phone WHERE id="+id ;        Integer.parseInt("hand") ;        return jdbcTemplate.queryForList(sql,String.class).get(0) ;    }    // 降级处理    public String fallback(Integer id) {        return "服务降级,id="+id ;    }    // 异常处理    public String exceptionHandler(Integer id,BlockException be) {        be.printStackTrace();        return "服务抛异常,id="+id ;    }}

9002请求服务

@RequestMapping(value = "/web/getJdbc",method = RequestMethod.GET)public String getJdbc () {    return msgFeign.getJdbc() ;}

3、效果测试

通过控制台配置9001的限流规则,然后刷接口看效果。

SpringCloud中如何使用Sentinel哨兵组件

注意阻断异常和业务异常的返参区别。

4、对比Hystrix组件

Hystrix的核心点在于以隔离和熔断为主的容错机制,超时或被熔断的调用将会快速失败,并可以提供 fallback 机制;

Sentinel核心点在于流量控制多样化,熔断降级服务,系统负载保护,实时监控和控制台;

补刀一句:对于流量控制类的组件,大部分场景是使用限流,服务降级这两块核心功能。

关于SprinGCloud中如何使用Sentinel哨兵组件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: SpringCloud中如何使用Sentinel哨兵组件

本文链接: https://www.lsjlt.com/news/229838.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringCloud中如何使用Sentinel哨兵组件
    这篇文章给大家介绍SpringCloud中如何使用Sentinel哨兵组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、概念描述Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务...
    99+
    2023-06-02
  • 如何进行Redis 6.X Sentinel哨兵集群搭建
    如何进行Redis 6.X Sentinel哨兵集群搭建,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。码哥带大家完成在 CentOS 7 中安装 Redis 6...
    99+
    2023-06-15
  • SpringCloud中如何使用Sentinel实现限流
    这篇文章主要介绍了SpringCloud中如何使用Sentinel实现限流的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud中如何使用Sentinel实现限流文章都会有所收获,下面我们一起来看...
    99+
    2023-06-26
  • Java中如何使用SpringCloudAlibaba Sentinel组件
    Java中如何使用SpringCloudAlibaba Sentinel组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Sentinel 是什么随着微服务的流行,服务和服...
    99+
    2023-06-20
  • SpringCloud Bus组件如何使用
    本文小编为大家详细介绍“SpringCloud Bus组件如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud Bus组件如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-06-29
  • PHP中redis哨兵模式怎么使用
    在PHP中使用Redis的哨兵模式,需要安装redis扩展,并设置哨兵模式相关的配置。 步骤如下: 安装Redis扩展:使用`p...
    99+
    2023-10-25
    PHP redis
  • SpringCloud中Ribbon和Feign组件如何使用
    SpringCloud中Ribbon和Feign组件如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Ribbon简介1、基本概念Ribbon是一个客户...
    99+
    2023-06-02
  • Redis中的哨兵模式如何实现
    这篇文章主要介绍Redis中的哨兵模式如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis Sentinel哨兵模式 是一个分布式系统, 你可以在一个架构中运行多个 Se...
    99+
    2024-04-02
  • 如何在项目中使用Spring Cloud Alibaba Sentinel组件
    这篇文章主要介绍“如何在项目中使用Spring Cloud Alibaba Sentinel组件”,在日常操作中,相信很多人在如何在项目中使用Spring Cloud Alibaba Sentinel组件问题上存在疑惑,小编查阅了各式资料,...
    99+
    2023-06-20
  • 浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件
    目录Sentinel 是什么Sentinel与Hystrix的区别 Sentinel分为两大部分:一、控制台(Dashboard) 二、搭建客户端1.在自己的项目...
    99+
    2024-04-02
  • SpringCloud中使用Sentinel实现限流的实战
    目录前言正文 SentinelSentinel的限流原理第一步:部署sentinel-dashboard第二步:在项目中整合sentinel前言 在分布式的项目中经常会遇到那种高并发...
    99+
    2024-04-02
  • Sentinel如何在Redis中使用
    今天就跟大家聊聊有关Sentinel如何在Redis中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、sentinel monitor用法:sentinel moni...
    99+
    2023-06-14
  • SpringCloud Gateway路由组件怎么使用
    这篇文章主要介绍“SpringCloud Gateway路由组件怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Gateway路由组件怎么使用”文章...
    99+
    2023-07-05
  • SpringCloud Bus组件的使用配置详解
    目录什么是Bus搭建RabbitMQ服务实现自动配置刷新指定服务刷新配置集成webhook实现自动刷新什么是Bus 0.解释 https://spring.io/projects/s...
    99+
    2024-04-02
  • bootstrap组件中如何使用导航组件
    这篇文章主要介绍了bootstrap组件中如何使用导航组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Bootstrap 中的导航组件都依...
    99+
    2024-04-02
  • SimpleFramework中如何使用组件
    这篇文章主要讲解了“SimpleFramework中如何使用组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SimpleFramework中如何使用组件”吧!描述文件的位置XML描述文件的...
    99+
    2023-06-17
  • VB.NET中 TextBox组件如何使用
    VB.NET中 TextBox组件如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 启动Visual Studio .Net。 选择菜单【文件】|【新建】|【项目】后...
    99+
    2023-06-17
  • Django中如何使用 Form组件
    Django中如何使用 Form组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。为什么需要Form组件注:Form组件,只适用于,前后端...
    99+
    2024-04-02
  • Vue中如何使用header组件
    这期内容当中小编将会给大家带来有关Vue中如何使用header组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、 header 组件开发 之数据的传递1. App.v...
    99+
    2024-04-02
  • Bootstrap中如何使用Toasts组件
    这篇文章主要介绍Bootstrap中如何使用Toasts组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 吐司消息(Toasts)示例吐司(Toasts)是一种轻量级通知,旨在模...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作