grpc断路器之sentinel

背景

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

技术选型

因为是springboot服务且集成了istio,这里考虑三种方案github

  • istio
  • hystrix
  • sentinel

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

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

Sentinel 与 Hystrix 的对比微服务

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

步骤

一、增长相关依赖

<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>

二、增长配置类

方案一:增长全局拦截器code

/**
 * @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);
    }
}

方案二:调用时增长拦截器 固然这里也能够换一种方式增长拦截器,以下,在启动类中增长server

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

而后在调用类中增长依赖blog

@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);

}

三、增长sentinel dashboard配置

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

四、部署sentinel dashboard

部署参考下面连接:图片

Sentinel 控制台

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

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

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

相关文章
相关标签/搜索