项目示例:
内容提要:
文档:
java -jar jar包名称
启动sentinel dashboardlocalhost:8080
打开首页,账号和密码皆为sentinel登录(sentinel dashboard默认是懒加载模式,即只有访问过一次微服务接口后,才会在sentinel中显示)
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
spring:
cloud:
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 配置sentinel dashboard地址
dashboard: localhost:8080
# sentinel客户端启动的端口,默认8719端口(占用时会依次+1找未占用端口)
port: 8719
在sentinel dashboard上配置的规则会存储在sentinel客户端的内存中,因此在微服务重启后,配置的规则会消失。sentinel可以更改数据源,将规则持久化到其他数据源中(以下以nacos为例)。进行持久化配置后,配置规则的流程是:在数据源上修改,之后会自动同步到sentinel并应用于微服务(直接在sentinel dashboard上增删改规则并不会同步到数据源上,因此修改只是临时的,重启微服务后便会丢失)
配置步骤:(涉及配置中心的知识,可结合后续的配置中心nacos知识)
<dependency>
<groupId>com.alibaba.cspgroupId>
<artifactId>sentinel-datasource-nacosartifactId>
dependency>
spring:
cloud:
sentinel:
datasource:
# 配置的数据源名称,可任意起名
flow:
# 数据源类型
nacos:
# nacos地址
server-addr: ${spring.cloud.nacos.config.server-addr}
# 配置文件名称
data-id: ${spring.application.name}-flow
# namespace(默认用public命名空间时不需要显示声明)和groupId
group-id: DEFAULT_GROUP
data-type: json
# 读取来的json字符串用于sentinel的哪项配置
rule-type: flow
[]
,内部为多个属性组成的对象{ "key": value }
在类或者API方法上用@SentinelResource注解修饰可以配置资源。当资源触发流控降级规则时,抛出BlockException,若有配置blockHandler,则由该Handler处理。fallbackHandler会处理所有异常(包括BlockException)。同时配置blockHandler和fallbackHandler时,前者优先级更高。
通过配置blockHandler和fallbackHandler,可以自定义流控、降级、异常时的返回信息。
注解属性
流量控制(也称流控,同限流)分为对单机微服务请求的控制和对集群微服务请求的控制(倘若只针对集群每个节点配置单机流控,则有可能因为流量不均匀导致单机达到阈值触发流控但集群整体没达到阈值)。
无论哪个熔断策略,都要求一个最小请求数目,即在一个统计时长内,请求数量必须大于等于设置的最小请求数目,然后再考虑是否达到其他熔断策略,否则不会触发熔断。
达到熔断策略的条件(即触发熔断),资源被熔断后,接下来的一个熔断时长内请求会自动被熔断。经过熔断时长后,熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求不会触发熔断策略的条件则结束熔断,否则会再次被熔断。
热点参数限流可以看做是一种特殊的流量控制,仅对包含指定参数的请求生效。
注意 必须是资源名
,必须唯一对应用级别的入口流量进行控制。是针对应用整体维度的,而不是资源维度的,并且仅对入口流量(进入应用的流量)生效。
根据请求来源来限制资源是否通过。请求来源的判断需要微服务中自定义类实现RequestOriginParser接口和方法,并@Component注入(注意,要考虑request中没有对应key的情况)。