一、sentinel是什么
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 分为两个部分:
- 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo /
Spring Cloud 等框架也有较好的支持。 - 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等
应用容器。
Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖Dashboard,但是结合Dashboard 可以取得最好的效果。
基本概念:
资源:是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。
只要通过 Sentinel API 定义的代码,就是资源,能够被Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。
规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
主要作用:
- 流量控制
- 熔断降级
- 系统负载保护
我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用Sentinel 来进行资源保护,主要分为几个步骤:
- 定义资源
- 定义规则
- 检验规则是否生效
先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。
二、sentinel的使用
-
官方下载jar包地址
https://github.com/alibaba/Sentinel/releases -
在doc命令窗口运行,java -jar java -jar sentinel-dashboard-xxx.jar
然后访问:http://localhost:8080 -
在微服务配置文件中配置
spring:
cloud:
sentinel:
transport:
port: 8719 #8719是数据传输端口号
dashboard: localhost:8080 #8080是访问端口号,这用localhost,别用127.0.0.1,不然访问不到
- 还需要在微服务中暴露sentinel的端点
management:
endpoint:
web:
exposure:
inclue: '*' #暴露所有的端点
- 重启微服务
调用微服务中的接口后,访问localhost:8080
三、整合feign组件
- 引入feign的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 在配置文件中开启sentinel对于feign的监控功能
feign:
sentinel:
enabled: true
- 给feign一个实现类
当服务提供者出错时,直接就开启熔断。这个比以前开启feign的熔断更简单