java流控框架_Alibaba开源组件-分布式流量控制框架sentinel初探

Sentinel 是什么?

还是皮一下吧详细的介绍在Alibaba已经介绍的很详细了。

如何使用:

其实也就三个步骤:

1、添加依赖

目前的最新的版本是0.2

com.alibaba.csp

sentinel-core

0.2.0

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

运行结果:

c7aead32f7b3e9b6d5e1e18e71bb3937.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值