Alibaba开源组件-分布式流量控制框架sentinel初探
Alibaba开源组件-分布式流量控制框架sentinel初探
Sentinel 是什么?
还是皮一下吧详细的介绍在Alibaba已经介绍的很详细了。
如何使用:
其实也就三个步骤:
1、添加依赖
目前的最新的版本是0.2
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>0.2.0</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
2、初始化资源
需要使用如下的代码块将 你自己的代码块给包围起来。
Entry entry = null;
try {
entry = SphU.entry(resource);
//我的代码块
doSomething();
} catch (BlockException e1) {
//怎么处理那些被阻塞的请求
} finally {
if (entry != null) {
entry.exit();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
在Sentinel中,对那些被阻塞的请求,都是用catch到BlockException异常的方式进行处理的。
3、定义流量控制规则
Sentinel定义了三种规则对象,分别是:
FlowRule:流量控制规则
DegradeRule:熔断降级规则
SystemRule:系统负载规则
- 1
- 2
- 3
- 4
- 5
我们需要定义的规则的参数都是对应这些类的属性。这三个规则分别对应者三个RuleManager来加载规则。比如对于流量控制规则,使用FlowRuleManager.loadRules(List rules)来加载定义好的流控规则,从API可以看出,定义的规则可以不止一个。
定义流量控制规则一个demo如下:
publicp static void initFlowRules(String resource){
List rules = new ArrayList();
FlowRule rule = new FlowRule();
rule.setResource(resource); //资源名
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //限流阈值类型,此处为 qps类型
rule.setCount(5); //限流阈值,表示每秒钟通过5次请求
rules.add(rule); //将定义好的rule放在List中
FlowRuleManager.loadRules(rules);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
详细demo如下:
package com.alibaba.alibabaSentinel.test;
/**
*
* Copyright: Copyright (c) 2018 Jun_Zhou
*
* @ClassName: SentinelTest.java
* @Description: 分布式流量框架sentinel测试程序;
*
* @version: v1.0.0
* @author: JunZhou
* @Email: 1769676159@qq.com
* @Site: CERNO
* @date: 2018年12月9日 下午5:57:51
*/
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
public class SentinelTest
{
static int executedNumber = 0;
@Test
public void test01()
{
String resourceName = "qpsSentinel";
initFlowRules(resourceName); //上面定义的规则
for (int i = 0; i < 10; i++)
{
Entry entry = null;
try
{
entry = SphU.entry(resourceName);
//我的代码块
doSomething();
}
catch (BlockException e1)
{
e1.printStackTrace(); //直接将异常打出来
}
finally
{
if (entry != null)
{
entry.exit();
}
}
}
}
public static void doSomething()
{
// TODO Auto-generated method stub
executedNumber++;
System.out.print("-------CurrentExecutedNumber-------" + executedNumber);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
static void initFlowRules(String resource)
{
List rules = new ArrayList();
FlowRule rule = new FlowRule();
rule.setResource(resource); //资源名
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //限流阈值类型,此处为qps类型
rule.setCount(5); //限流阈值,表示每秒钟通过5次请求
rules.add(rule); //将定义好的rule放在List中
FlowRuleManager.loadRules(rules);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
运行结果:
Alibaba开源组件-分布式流量控制框架sentinel初探的更多相关文章
- 【转】Dubbo是Alibaba开源的分布式服务框架
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- Dubbo阿里Alibaba开源的分布式服务框架
[获奖公布]"我的2016"主题征文活动 程序猿全指南,让[移动开发]更简单! [观点]移动原生App开发和HTML 5开发,你更看好哪个? 博客的神秘功能 D ...
- 开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。
seata的使用 1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而 ...
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- Java分布式服务框架Dubbo初探(待实践)
Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...
- 阿里分布式服务框架Dubbo的架构总结
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- 快速了解阿里微服务热门开源分布式事务框架——Seata
一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...
- dubbo分布式rpc框架用法
dubbo是阿里巴巴开源的分布式服务框架,致力于提供高性能和透明化的rpc远程服务调用方案,以及soa服务治理方案,如果没有分布式需求,是不需要dubbo的,分布式环境dubbo的使用架构官方给出了一 ...
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
随机推荐
- [CSP-S模拟测试]:序列(二分答案+树状数组)
题目传送门(内部题98) 输入格式 第一行一个整数$n$,第二行$n$个整数$a_1\sim a_n$,第三行$n$个整数$b_1\sim b_n$. 输出格式 一行一个整数表示$\max(r-l+1 ...
- highcharts柱状图、饼状图
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- python3笔记二十二:正则表达式之函数
一:学习内容 re.match函数 re.search函数 re.findall函数 二:re.match函数 需要导入包:import re 1.格式:match(pattern,string,fl ...
- readerwriterqueue 一个用 C++ 实现的快速无锁队列
https://www.oschina.net/translate/a-fast-lock-free-queue-for-cpp?cmp&p=2 A single-producer, sing ...
- 【闭包】JS闭包深入理解
先看题目代码: 1 2 3 4 5 6 7 8 9 10 11 12 function fun(n,o) { console.log(o) return { fun:function(m){ ...
- Android新项目GBSS:第1篇 搭建开发环境
最近接手一个Android新项目,之前也没做过这方面的开发,算是边学边干,这两天看了一下Android开发的书,大致入门了一点,今天把所需要的软件都下了下来,准备开工,先列一下开发环境: 所有的软件都 ...
- Copy-On-Write in Swift
Premature optimisation is the root of all evil. But, there are moments where we need to optimise our ...
- Carousel 走马灯
在有限空间内,循环播放同一类型的图片.文字等内容 基础用法 适用广泛的基础用法 结合使用el-carousel和el-carousel-item标签就得到了一个走马灯.幻灯片的内容是任意的,需要放在e ...
- C 表达式中的汇编指令
asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析. asm 表达式有两种形式,第二种 asm-qualifier ...
- selenium+java:获取列表中的值
selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...