博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
企业级 SpringCloud 教程 (四) 断路器(Hystrix)
阅读量:7023 次
发布时间:2019-06-28

本文共 1912 字,大约阅读时间需要 6 分钟。

一、断路器简介

Netflix has created a library called Hystrix that implements the circuit breaker pattern. In a microservice architecture it is common to have multiple layers of service calls.

. —-摘自官网

Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:

较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。

断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

二、准备工作

这篇文章基于上一篇文章的工程,首先启动上一篇文章的工程,启动eureka-server 工程;启动service-hi工程,它的端口为8762。

三、在ribbon使用断路器

改造serice-ribbon 工程的代码,首先在pox.xml文件中加入spring-cloud-starter-hystrix的起步依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

  在程序的启动类ServiceRibbonApplication 加@EnableHystrix注解开启Hystrix:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public
class
ServiceRibbonApplication {
public
static
void
main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.
class
, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return
new
RestTemplate();
}
}

  改造HelloService类,在hiService方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串,字符串为”hi,”+name+”,sorry,error!”,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Service
public
class
HelloService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand
(fallbackMethod =
"hiError"
)
public
String hiService(String name) {
return
restTemplate.getForObject(
"http://SERVICE-HI/hi?name="
+name,String.
class
);
}
public
String hiError(String name) {
return
"hi,"
+name+
",sorry,error!"
;
}
}

  启动:service-ribbon 工程,当我们访问,浏览器显示:

1
hi forezp,i am from port:
8762

  此时关闭 service-hi 工程,当我们再访问,浏览器会显示:

1
hi ,forezp,orry,error!

  这就说明当 service-hi 工程不可用的时候,service-ribbon调用 service-hi的API接口时,会执行快速失败,直接返回一组字符串,而不是等待响应超时,这很好的控制了容器的线程阻塞。

Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求:一七九一七四三三八零

转载于:https://juejin.im/post/5c85fe77e51d456e77187e9a

你可能感兴趣的文章
学习笔记TF060:图像语音结合,看图说话
查看>>
嘻哈说:设计模式之工厂方法模式
查看>>
工程实践:给函数取一个"好"的名字
查看>>
说说如何使用 vue-router 插件
查看>>
Java Bean + 注册验证
查看>>
通过mysql 插入一句话***
查看>>
邮件服务器
查看>>
Java FAQ(2)
查看>>
JavaScript常用事件总结
查看>>
关于加密的一些笔记
查看>>
Oracle 数据库查看client的用户登录信息包括ip
查看>>
Alipay 开源 SofaRPC
查看>>
WinRAR4.11激活
查看>>
运行浏览器的最高版本
查看>>
深入探讨Java类加载器
查看>>
springmvc hello-servlet.xml配置文件
查看>>
kindeditor + syntaxhighlighter 使文章内的插入代码高亮显示
查看>>
angular2 学习二 [property] - 绑定属性
查看>>
iostat 实例分析
查看>>
php学习日记
查看>>