day04 降级处理 原理和实现过程详解

降级处理

1)服务降级处理

image-20210507160329016
1.服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
2.服务降级虽然会导致请求失败,但是不会导致阻塞。

微服务中降级处理通过Hystix 来实现,Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三

方库,防止出现级联失败(雪崩)。

雪崩:一个服务失败,导致整条链路的服务都失败的情形

2.服务降级的处理步骤

实现步骤:

①:在heima-leadnews-feign-api编写降级逻辑

( 解析

1.创建一个类,专用于降级服务,此处因为考虑到保存文章时候的并发问题,

2.所以我们实现远程调用文章的类IArticleClient

3.改写保存文章的方法

4.输出的结果改成预警,也就是报告一个错误,或者通过redis快速告知人员,提供解决方案

package com.heima.apis.article.fallback;

/**
 * feign失败配置
 * @author itheima
 */
@Component
@Slf4j
public class IArticleClientFallback implements IArticleClient {
    @Override
    public ResponseResult saveArticle(ArticleDto dto) {
        log.error("远程调用文章微服务失败,服务降级!");
        //Redis,微信,短信 ——》 推送错误消息给运维人员,尽快检查服务器
        return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,"获取数据失败");
    }
}

在自媒体微服务中添加类,扫描降级代码类的包

1.因自媒体微服务端要进行保存文章操作,也是自媒体微服务需要调用保存文章的方法。故此在此配置

2.包扫描那个降级处理的类所在的包,componentScan即可在启动时候,直接找到

package com.heima.wemedia.config;

@Configuration
@ComponentScan("com.heima.apis.article.fallback")
public class InitConfig {
}

②:远程接口中指向降级代码

1.原本编写的远程调服务客户端用接口,需要加一个配置,表明,当远程调用失败时候,启动降级处理。

package com.heima.apis.article;

//远程调用失败后,使用fallback = IArticleClientFallback.class的返回值
@FeignClient(value = "leadnews-article", fallback = IArticleClientFallback.class)
public interface IArticleClient {

    @PostMapping("/api/v1/article/save")
    public ResponseResult saveArticle(@RequestBody ArticleDto dto);
}

③:自媒体微服务heima-leadnews-wemedia开启熔断降级

在wemedia的nacos配置中心里添加如下内容,开启服务降级,也可以指定服务响应的超时的时间

Data ID: leadnews-wemedia

feign:
  # 开启feign对hystrix熔断降级的支持
  hystrix:
    enabled: true

④:测试

在heima-leadnews-article模块的ApArticleServiceImpl类中saveArticle方法添加代码

/**
 * 保存app端相关文章
 */
@Override
@Transactional
public ResponseResult saveArticle(ArticleDto dto) {

    //测试服务熔断降级
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    
    //省略原有代码...
    
}
#重启文章微服务

在自媒体端进行审核测试,会出现服务降级的现象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rfWJLfWu-1656922767126)(E:/heima01/10_黑马头条/老师笔记/黑马头条day04-笔记/自媒体文章-自动审核.assets/image-20210725184745651.png)]

3.总结

类似AOP

在原本的远程调用基础上,

1.先开始一个备选,即降级处理

2.新写一个接口,继承原本的远程调用客户端,这样也就知道是哪个微服务的哪个方法,需要远程调用。进一步也可以输出一些警告,或者给运维等人员进行发消息等,也知道是哪个类、

3.现在就剩下自媒体微服务不知道了

所以我们在 自媒体微服务中添加类,扫描降级代码类的包

4.在自媒体的配置中心上进行配置,服务降级的开启,响应时间等

类似AOP,整个过程就是在自媒体微服务和远程调用微服务之间,增强了一下

因为本身出现就是在自媒体调用保存文章时候,所以只需要增强调用之间的协调问题

整个过程不涉及到对文章微服务的操作

自媒体微服务中添加类,扫描降级代码类的包

4.在自媒体的配置中心上进行配置,服务降级的开启,响应时间等

类似AOP,整个过程就是在自媒体微服务和远程调用微服务之间,增强了一下

因为本身出现就是在自媒体调用保存文章时候,所以只需要增强调用之间的协调问题

整个过程不涉及到对文章微服务的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值