文档章节

dubbo服务配置sentinel

alexzhu592
 alexzhu592
发布于 2018/08/26 08:40
字数 648
阅读 263
收藏 3

前言

    前几天ali开源了Sentinel项目,Sentinel中文意思是哨兵,作为dubbo的配套项目,看字面意思是dubbo的一个监控系统,sentinel自己的官方文档上是这样说的:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本文就是想简单的配置一下sentinel。

准备

Sentinel的官方文档是放在 Sentinel官方文档地址,配合上一篇文章配置的dubbo项目,无需依赖其他的外部资源。

开始

    在provider端的 pom.xml 文件中加入以下依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>0.1.1</version>
</dependency>

  在sayHello服务的中嵌入Sentinel的代码:

public class SayHelloImpl implements SayHello {
    @Override
    public String sayHello(String name) {
        initFlowRules();
        Entry entry = null;
        try {
            entry = SphU.entry("HelloWorld");
            System.out.println("hello world");

            return "Hello " + name;
        } catch (BlockException e1) {
            System.out.println("exception is " + BlockException.isBlockException(e1));
            System.out.println("block!");
        } finally {
            if (entry != null) {
                entry.exit();
            }
        }
        return "";
    }

    private void initFlowRules() {
        List<FlowRule> rules = new ArrayList<FlowRule>();
        FlowRule rule = new FlowRule();
        rule.setResource("HelloWorld");
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // Set limit QPS to 20.
        rule.setCount(5);
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
}

      在上述代码中,把限流的方式设置为QPS = 5,然后改造下客户端的代码,进行20 次的调用:

public class ConsumerApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        SayHello sayHello = (SayHello) ctx.getBean("sayHello");
        for (int i = 0; i < 20; i++) {
            String s = sayHello.sayHello("张三");
            System.out.println(i + ":" + s);
        }
    }
}

   启动Provider端和Consumer端后,看到provider的后台打印的是:

hello world
hello world
hello world
hello world
hello world
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!
exception is true
block!

     只有前五次的调用成功了,其他的都在报了BlockException。所以在限流的时候,可以通过在BlockException 中进行限流那些请求的访问逻辑处理。

    Sentinel其实有提供一套注解,实现代码零侵入,接下来把代码改成注解形式实现,增加Sentinel的注解依赖包:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
    <version>0.1.1</version>
</dependency>

    启动类改成springboot启动,增加注解的启动配置:

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) throws IOException {
        SpringApplication.run(ProviderApplication.class,args);
        System.in.read();
    }

    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        return new SentinelResourceAspect();
    }

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        registryConfig.setClient("provider");
        return registryConfig;
    }
}

 

© 著作权归作者所有

alexzhu592
粉丝 3
博文 49
码字总数 31262
作品 0
厦门
程序员
私信 提问
pwh19920920/sentinel-dubbo

本项目为sentinel与dubbo结合的改造项目。 一、由来 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等...

pwh19920920
03/18
0
0
Dubbo 的流量防卫兵| Sentinel如何通过限流实现服务的高可用性

在复杂的生产环境下可能部署着成千上万的服务实例,当流量持续不断地涌入,服务之间相互调用频率陡增时,会产生系统负载过高、网络延迟等一系列问题,从而导致某些服务不可用。如果不进行相应...

中间件小哥
2018/08/09
0
0
Dubbo使用Sentinel来对服务进行降级与限流

一、Sentinel 是什么 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的...

nonnetta
2018/12/24
911
0
推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者
2016/09/27
439
0
Sentinel 0.1.1 发布,阿里中间件高可用流量管理框架

Sentinel 0.1.1 已发布,主要修复和改进了一些问题,并增加了以下新特性: 增加 Nacos、ZooKeeper、Apollo 动态数据源适配 增加注解支持,可以方便地利用注解定义资源并配置 fallback 函数 ...

sczyh30
2018/08/09
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Java描述设计模式(14):解释器模式

本文源码:GitHub·点这里 || GitEE·点这里 一、解释器模式 1、基础概念 解释器模式是对象的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客...

知了一笑
8分钟前
2
0
019、Kubernetes 安装集群

概述 kubeadm 是 kubernetes 的集群安装工具,能够快速安装 kubernetes 集群,安装 kubernetes 主要是安装它的各个镜像,而 kubeadm 已经为我们集成好了运行 kubernetes 所需的基本镜像。但由...

北岩
22分钟前
3
0
Java每日面试题_02

13、Java中实现多态的机制是什么? Java中,靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方...

庭前云落
24分钟前
2
0
kafka 生成者,消费者 demo

写生成者和消费者 producer 生产者 public class ProducerDemo {public static void main(String[] args) throws Exception {Properties props = new Properties();props.put("zk......

Garphy
29分钟前
2
0
各版本JDK:JDK6;JDK7;JDK1.8;JDK11;JDK13

百度网盘 链接: https://pan.baidu.com/s/1S1W6XQOEj4m8uRQZ3rMbNA&shfl=shareset 提取码: 1jke jdk-13.0.1 jdk-11.0.5 jdk-8u231 华为镜像 链接: https://repo.huaweicloud.com/java/jdk/......

孑竹三秋
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部