Spring Cloud Alibaba (3) - Sentinel

200 阅读1分钟

代码地址:github.com/toyranger/l…

服务熔断

服务雪崩:在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过HTTP/RPC相互调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或自身原因,服务并不能100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时如果大量请求涌入,Servlet容器的线程资源就会耗尽,导致服务瘫痪。 服务与服务之间的依赖性,导致故障会传播,会对整个微服务系统造成灾难性后果。这就是服务雪崩效应。为了解决这个问题,业界提出了熔断器模型

1. sentinel控制台

可以下载jar,也可以下载源码自行编译 github.com/alibaba/Sen…

## 端口改成和其他服务不冲突的即可,登录账号:sentinel/sentinel
java -Dserver.port=8700 -Dcsp.sentinel.dashboard.server=localhost:8700 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

2. pom.xml

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

3. 在配置中心的配置上添加sentinel配置

spring:
  application:
    name: service-consumer

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        dashboard: 127.0.0.1:8700

feign:
  sentinel:
    enabled: true

4. 创建服务熔断类,用来处理服务阻塞之后的情况

我这里模拟调用提供者的/hello/{name}接口异常

## 模拟异常的服务,指定FallBack类
@FeignClient(name = "service-provider", fallback = HelloServiceFallBack.class)
public interface HelloService {

    @GetMapping("/hello/{name}")
    String hello(@PathVariable String name);
}

## FallBack类
@Component
public class HelloServiceFallBack implements HelloService {
    @Override
    public String hello(String name) {
        return "你的网络有问题";
    }
}