Sentinel 是什么?
还是皮一下吧详细的介绍在Alibaba已经介绍的很详细了。
如何使用:
   其实也就三个步骤:
    1、添加依赖
目前的最新的版本是0.2
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>0.2.0</version>
</dependency>
2、初始化资源
需要使用如下的代码块将 你自己的代码块给包围起来。
Entry entry = null;
try {
    entry = SphU.entry(resource);
    //我的代码块
    doSomething();  
} catch (BlockException e1) {
    //怎么处理那些被阻塞的请求
} finally {
    if (entry != null) {
        entry.exit();
    }
}
在Sentinel中,对那些被阻塞的请求,都是用catch到BlockException异常的方式进行处理的。
3、定义流量控制规则
Sentinel定义了三种规则对象,分别是:
FlowRule:流量控制规则
DegradeRule:熔断降级规则
SystemRule:系统负载规则
我们需要定义的规则的参数都是对应这些类的属性。这三个规则分别对应者三个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);
    }
详细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);
    }
}
  运行结果:
  