学习 Spring Boot 断路由(Hystrix)小结

本文探讨了在微服务架构下如何使用Hystrix处理服务间的依赖故障问题,介绍了通过配置Feign实现断路器功能的具体实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

ribbon , rest ,feign 让我知道均衡负载的实现。但是如果在这中间,有服务因为各种原因无法正常工作或者关闭了呢?

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

我之前没有碰到或者处理过类似这样的问题,不知道程序员口中的雪崩是怎么形成的,但是我知道的是,如果有一个组件出现了问题,那应该捕获这个问题进行处理。今天学习的断路由(Hystrix在我看来,就是一个异常处理机制。本节传送:断路由传送

配置

在我看来,还要手动配置依赖是不明智的,Spring boot 都给你省了这么多配置了,你还自己手敲依赖,那不是违背人家初衷吗? 所以我觉得,干这些事儿,能用工具解决就用工具解决。我用的idea ,在建Spring boot工程的时候一开始就把所有要用到的依赖解决了。
1. 建立模块
新建模块选择这个
2. 选择相应的依赖
这里是断路由的,仪表盘也加上去了

feign 自带断路由(但是默认没开启),当然就不用勾选了,需要用到仪表盘就把仪表盘勾上就行。在配置文件里写上以下就可以开启断路由。

feign:
  hystrix:
    enabled: true

开启后只需要通过注解的方式@FeignClient() 就能完成应用。fallback 指定一个处理者(service-hi 是指定的服务)

@Service
@FeignClient(value = "service-hi",fallback =HystrixHandler.class )
public interface HiInterface {
    @RequestMapping("/hi")
    String sayHi(@RequestParam("name") String name);
}

HystrixHandler 实现 HiInterface的方法

@Component
public class HystrixHandler implements HiInterface{
    @Override
    public String sayHi(String name) {
        System.out.println("不好意思,出错了");
        return "error"+name;
    }
}

也就是当该服务不可用的时候,交给HystrixHandler来响应请求。

发现

在我多次尝试后发现了一个规律,假设 service-hi 有两个实例A,B,第一次访问路由到了A,第二次访问路由到B,当第三次访问应该又回到A,但这时候A挂了。那么HystrixHandler 开始工作,打印

不好意思,出错了

然后它又转而去访问B了。B打印

hisky

所以这次请求还是被响应了。只不过不是A。

然后你第二次访问,它还是会先去访问A,依然打印上面的。直到第四次以后。它好像意识到A已经挂掉了。所以不会再去访问A ,然后你的每次访问都是直接访问B了。不过还没完,它每过一段时间就会去访问一下A,好像是要去判断A是否已经“”过来。如果没有 ,又继续访问B。

END

如果有问题,希望大佬能指出来!
欢迎讨论,互相学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值