feign 整合sentinel_SpringCloud 中集成Sentinel+Feign实现服务熔断降级

本文介绍了如何在Spring Cloud中使用Sentinel进行服务的流量控制、熔断降级和系统负载保护。Sentinel相比Hystrix功能更加强大。文章详细讲解了Sentinel的配置、注解使用、降级策略以及与Feign的整合,展示了如何通过Sentinel控制台设置降级规则,并在服务降级时通过Feign调用降级服务。
摘要由CSDN通过智能技术生成

Sentine

1.背景

Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。这里大家可能会问:Sentinel 和之前常用的熔断降级库 Netflix Hystrix 有什么异同呢?Sentinel官网有一个对比和Hystrix迁移到sentinel的文章,这里摘抄一个总结的表格,具体的对比可以点此 链接查看。

功能对比

从对比的表格可以明显看到,Sentinel比Hystrix在功能性上还要强大一些。

2.功能

Sentinel 功能主要体现在三个方面

2.1 流量控制

对于系统来说,任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。

控制角度如下:

资源的调用关系,例如资源的调用链路,资源和资源之间的关系

运行指标,例如 QPS、线程池、系统负载等

控制的效果,例如直接限流、冷启动、排队等

2.2 熔断降级

当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联故障。手段如下

通过并发线程数进行限制 :当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

通过响应时间对资源进行降级:当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

2.3 系统负载保护

Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果 这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

3.使用

3.1 依赖

这里我使用sentinel 是基于gradle配置,兼容spring clould alibaba,所以添加如下依赖

compile'com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:2.1.0.RELEASE'

compile group: 'com.alibaba.csp', name: 'sentinel-transport-simple-http', version: '1.6.3'

3.2 注解

Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException等,当然也支持使用aop的方式,这里演示使用aop的方式,添加如下配置类

@Configurationpublic classSentinelAspectConfiguration {

@BeanpublicSentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect();

}

}

@SentinelResource用于定义资源,并提供可选的异常处理和 fallback 配置项 。该注解包含以下属性

value:资源名称,必需项(不能为空)

entryType:entry 类型,可选项EntryType.OUT/EntryType.IN(默认为 EntryType.OUT),对应入口控制/出口控制

blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称。

fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理

返回值类型必须与原函数返回值类型一致

fllback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值