前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >微服务之SpringCloud架构第四篇——Hystrix熔断器的初级使用

微服务之SpringCloud架构第四篇——Hystrix熔断器的初级使用

作者头像
leehao
发布2025-02-11 11:19:47
发布2025-02-11 11:19:47
10200
代码可运行
举报
文章被收录于专栏:leehaoleehao
运行总次数:0
代码可运行

1、Hystrix 熔断机制

所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器。 在程序中,为了保证其高可用,单个服务通常会集群部署。由于网络或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Netflix的Hystrix开源组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求如果需要调用多个服务是,假如底层的服务出现故障,会导致整个系统连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 熔断器将会被打开,避免连锁故障。

2、实例(以ribbon为例)

在前面章节ribbon 的基础上做以改动,启动注册中心eureka server,启动一个client port:8762。

1、在pom文件中增加hystrix依赖:

代码语言:javascript
代码运行次数:0
复制
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

2、在启动类添加@EnableHystrix注解,开启熔断器。

3、在Service中,添加熔断后处理机制@HystrixCommand(fallbackMethod = "hiError"),若访问该方法失败,则调用fallbackMethod中的hiError方法。

代码语言:javascript
代码运行次数:0
复制
@Service
public class HiService {
    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError")
    public String hiService(String name){
        return restTemplate.getForObject("http://DemoApp/sayHi?name="+name,String.class);
    }
    public String hiError(String name){
        return "hello,"+name+" ,I am sorry!";
    }
}

4、正常访问http://localhost:8764/sayHi?name=张三

5、关闭客户端服务后,再次访问上述url:

这表明如果访问地址不可达,则去调用熔断处理机制的方法,而不是一直处于等待状态直至超时,解决了服务故障雪崩效应问题。

3、实例(以feign为例)

还是在前面章节feign 的基础上做以改动。

Feign自带熔断器,在Finchley版本中默认是关闭的,如果需要开启,在配置文件中添加如下配置:

代码语言:javascript
代码运行次数:0
复制
feign:
  hystrix:
    enabled: true

在FeignClient的ServiceSayHi接口的注解中加上fallback的指定类

代码语言:javascript
代码运行次数:0
复制
@FeignClient(value = "DemoApp",fallback = ServiceHiHystric.class)
public interface ServiceSayHi {
    @RequestMapping(value = "sayHi",method = RequestMethod.GET)
    String sayHiFromClient(@RequestParam(value = "name") String name);
}

其中fallback指定类需要继承ServiceSayHi,并重写方法,方法中实现熔断后需要进行的操作。

代码语言:javascript
代码运行次数:0
复制
@Component
public class ServiceHiHystric implements ServiceSayHi {
    @Override
    public String sayHiFromClient(String name) {
        return "sorry:"+name;
    }
}

启动注册中心、启动client、启动feignClient,多次访问http://localhost:8765/sayHi?name=张三,如下:

关闭一个client 端口为8763,再多次访问,发现只有8762:

关闭client,端口8762,此时已没有client,再次访问,发现服务已熔断,访问不可达,跳至熔断后操作界面:

这样,通过熔断机制,不会导致服务雪崩效应。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Hystrix 熔断机制
  • 2、实例(以ribbon为例)
  • 3、实例(以feign为例)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档