目录
本章给大家介绍Resilience4j,从四个方面对Resilience4j进行阐述:Resilience4j是什么,为什么要用它,用在哪个位置以及怎么使用.也会介绍Resilience4j中常用的几个组件:断路器,限速器,舱壁隔离,限时器.
在这之前如果先了解Spring Cloud微服务还可以查看下面的几篇文章.
微服务开发(一) Spring Cloud 到底是什么?_flame.liu的博客-CSDN博客
微服务开发(二) :Spring Cloud:OpenFeign 服务调用与网关_flame.liu的博客-CSDN博客
微服务开发(三) Spring Cloud 网关gateway_flame.liu的博客-CSDN博客
一.为什么要用熔断器
熔断器的原理类似家庭用的电路保险丝,但电路短路或者过载时,主动切断电源,避免出现更大的问题.我们把网络也看作是一个电路,在网络中也会出现过载或者终端(服务)出现问题,那么这个使用避免出现更为严重的问题(可能由于一个服务的不可用,而导致其它服务的等待,最终造成整个服务器的崩溃),所以只能暂时先断开服务,那么这个时候就需要熔断器了.
当然我们的网络比电路肯定要智能很多,所以在熔断之后,不像电网一样,熔断之后什么都没有了.熔断器会在熔断之后执行预设的代替方案,但是在这个过程中,我们的服务已经出现了问题,显然是没有办法达到原来预定的效果了,只能降低服务标准,这里把提供降低标准的服务称为降级.
二.什么是Resilience4j
Resilience4j是Spring Cloud推荐的主流熔断器,之前有过一个Netflix Hystrix,但是已经不再更新了.
Rezilience4j主要包括:
断路器:Resilience4j-circuitbreaker
重试器:Resilience4j-retry
限速器:Resilience4j-ratelimiter
舱壁隔离:Resiliience4j-bulkhead
等多个组件,但重要的断路器,限速器,舱壁隔离这三个组件,这也是本篇文章进行讨论的三个内容.
三.在哪里使用Resilience4j
在spring cloud项目中,代码以模块的形式集合在我们的项目中.我们大致可以分为以下几类模块:
1.eureke-server:服务管理中心模块
2.gateway:网关模块
3.common:公共通用模块
4.客户端服务模块(在本例中,user,goods服务模块就属于此类)
那么我们的Resilience4j(熔断器)应该写在哪个模块了?
Resilience4j是当服务出现状况的时候,将客户端服务在服务中心下线,当然在这期间它需要做一些逻辑判断和善后处理,所以Resilience4j是需要和我们的客户端服务在一起了,这样才能实时的监管客户端服务是否出现状况.
所以接下来的操作我们都是在goods,user这两个提供实际服务的模块中进行的.