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

前言

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,它基于Spring Framework并遵循“约定优于配置”的原则,简化了Spring应用程序的配置和部署。Spring Boot提供了自动配置、起步依赖、生产就绪功能和可操作性等特性,使得开发者可以更快地构建应用程序并快速部署到生产环境。 在面试中,常见的Spring Boot Could问题包括: 1. Spring Boot Could是什么? 答:Spring Boot Could是一种云端开发平台,可以为开发者提供快速、可靠、灵活的企业级应用程序开发和部署服务。它提供了一系列的工具和框架,使得开发者可以更方便地构建、测试和部署应用程序。 2. Spring Boot Could有哪些优点? 答:Spring Boot Could提供了一系列的优点,包括: (1)灵活性:它可以在各种环境中运行,包括公有云、私有云和混合云。 (2)快速部署:应用程序可以在几分钟内部署,从而提高了开发者的生产力。 (3)可靠性:Spring Boot Could提供了高可用性和弹性计算能力,可以确保应用程序在任何情况下都可以正常运行。 (4)安全性:Spring Boot Cloud提供了各种安全措施,包括身份验证和授权等。 3. Spring Boot Could如何实现自动化配置? 答:Spring Boot Cloud默认提供了自动化配置,它允许应用程序无需手动配置即可自动从配置中心获取配置信息。开发者只需提供一些基本配置信息,Spring Boot可以自动地配置应用程序所需的组件和功能。 4. Spring Boot Could有哪些组件? 答:Spring Boot Could包含了很多组件,包括: (1)服务注册和发现:Eureka (2)自动化配置:Spring Cloud Config (3)路由和负载均衡:Zuul (4)分布式追踪:Spring Cloud Sleuth (5)服务容错保护:Hystrix (6)消息总线:Spring Cloud Bus 5. 如何使用Spring Boot Cloud? 答:使用Spring Boot Cloud需要以下步骤: (1)选择一个云平台,如AWS、Google Cloud或Azure。 (2)创建一个Spring Boot项目,添加Spring Boot Cloud依赖。 (3)配置应用程序,包括数据库、消息队列和服务注册等。 (4)部署应用程序。 总之,Spring Boot Cloud是一个强大的开发平台,可以快速地构建和部署生产级应用程序,并在各种云环境中运行。开发者需要掌握其核心特性和组件,才能充分利用其优点并优化应用程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值