文档章节

grpc断路器之sentinel

lipengHeke
 lipengHeke
发布于 03/23 23:01
字数 479
阅读 2.1K
收藏 6

背景

为了防止下游服务雪崩,这里考虑使用断路器

技术选型

由于是springboot服务且集成了istio,这里考虑三种方案

  • istio
  • hystrix
  • sentinel

这里分别有这几种方案的对比

微服务断路器模式实现:Istio vs Hystrix

Sentinel 与 Hystrix 的对比

首先考虑的是istio,但是在使用istio进行熔断、分流时,流量不稳定,并且返回状态以及数据达不到预取效果,后面考虑到sentinel自动集成了grpc,所以这里使用sentinel。

步骤

1、增加相关依赖

 <dependencies>
  <dependency>
           <groupid>com.alibaba.cloud</groupid>
           <artifactid>spring-cloud-starter-alibaba-sentinel</artifactid>
       </dependency>
       <dependency>
           <groupid>com.alibaba.csp</groupid>
           <artifactid>sentinel-grpc-adapter</artifactid>
           <version>1.7.1</version>
       </dependency>
   </dependencies>

<dependencymanagement>
       <dependencies>
           <dependency>
               <groupid>com.alibaba.cloud</groupid>
               <artifactid>spring-cloud-alibaba-dependencies</artifactid>
               <version>2.0.1.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
          </dependencies>
   </dependencymanagement>

2、增加配置类

方案一:增加全局拦截器


/**
 * @Auther: lipeng
 * @Date: 2020/3/23 17:24
 * @Description:
 */
@Order(Ordered.LOWEST_PRECEDENCE)
@Configuration
@Slf4j
public class SentinelConfig {
    @Bean
    public ClientInterceptor sentinelGrpcClientInterceptor(){
        return new SentinelGrpcClientInterceptor();
    }
    @Bean
    public GlobalClientInterceptorConfigurer globalInterceptorConfigurerAdapter(ClientInterceptor sentinelGrpcClientInterceptor) {
        return registry -&gt; registry.addClientInterceptors(sentinelGrpcClientInterceptor);
    }
}

方案二:调用时增加拦截器 当然这里也可以换一种方式增加拦截器,如下,在启动类中增加

@Bean
    public ClientInterceptor sentinelGrpcClientInterceptor(){
        return new SentinelGrpcClientInterceptor();
    }

然后在调用类中增加依赖

    @Autowired
    private ClientInterceptor sentinelGrpcClientInterceptor;

   public void doXXX(){
         XXXGrpc.XXXBlockingStub stub = XXXGrpc.newBlockingStub(serverChannel).withInterceptors(sentinelGrpcClientInterceptor);
         XXXApi.XXXResponse response = stub.withDeadlineAfter(grpcTimeout, TimeUnit.MILLISECONDS).doXXX(request);

}

3、增加sentinel dashboard配置

spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:7080

4、部署sentinel dashboard

部署参考下面链接:

Sentinel 控制台

启动后访问下相关链接,grpc自动集成上去了,效果如下:

在这里插入图片描述 在这里插入图片描述

详细配置可以参考官方wiki:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

© 著作权归作者所有

lipengHeke

lipengHeke

粉丝 12
博文 105
码字总数 57685
作品 1
深圳
架构师
私信 提问
加载中

评论(0)

暂无文章

【实战】3.迭代的规划

迭代的规划 在敏捷开发中比较常用的scrum强调的是增量,而agile强调的是迭代。在我们实际工作中,根据项目情况我们往往采用混合方式。 迭代的规划算是一个项目中非常重要的一环,一个迭代就是...

卖小女孩的小火柴
29分钟前
19
0
怎样寻回由于清空回收站的资料

问题描述: 清空回收站是非常常见的数据丢失现象。怎样寻回由于清空回收站的资料下面简单介绍一种快速且安全恢复的方法。 工具/软件:极限数据恢复软件 步骤1:先百度搜索并下载程序打开后,...

水果黄瓜
35分钟前
19
0
NAT深入浅出-04-NAT穿越可行行分析(基于新分类方法)

先写个title,然后慢慢实现

mr_liang0
37分钟前
17
0
聊聊skywalking的DatabaseSlowStatement

序 本文主要研究一下skywalking的DatabaseSlowStatement DatabaseSlowStatement skywalking-6.6.0/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Da......

go4it
44分钟前
17
0
Linux常用命令13 - echo

echo 命令是 Linux 中最基本和最常用的命令之一。 传递给 echo 的参数被打印到标准输出中。 echo 通常用于 shell 脚本中,用于显示消息或输出其他命令的结果。 echo 命令 echo 是 Bash 和其他...

叉叉敌
45分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部