熔断处理什么呢?在微服务项目中,有不少的服务,在服务消费者调用服务提供者的时候可能会出现网络异常或者请求超时或者阻塞等等一系列问题,不过不进行处理的话,就可能致使,长时间等待,进程阻塞,最终致使系统瘫痪。java
因此就有了熔断处理,当服务提供者的接口不能访问或者异常异常时,进行降级处理,服务消费者可以正常的处理返回特定是数据。从而达到容灾的目的。linux
看了一下Hystrix ,其实有不少东西,咱们就先来看看Hystrix 的简单使用,因为上节咱们也说了Fegin 中集成了Hystrix 和ribbon .因此咱们就直接使用Fegin 来实现一个简单的熔断处理的操做。git
其实咱们彻底能够在上一节的ribbon-consumer 的基础上来,我这里为了保持独立性,因此copy 了一份ribbon-consumer 改为hystrix-consumer。
pom文件引入fegin 的依赖程序员
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
在主类中增长@EnableFeignClients,其实这里仅仅使用hystrix 的话,可使用@EnableCircuitBreaker。github
配置文件中开启熔断处理,将feign.hystrix.enabled设置为tuespring
#开启熔断处理 feign.hystrix.enabled=true
重点来啦,咱们上一节在HelloService 中调服务提供者的接口,因此要作熔断处理的话,就须要在这里进行降级处理,就须要写一个降级处理的方法,若是服务提供者的接口不通,就调用这个方法,返回给客户端。
因此咱们在server层建立一个fallback 文件夹,在fallback 包下建立HelloServiceFallback类实现 HelloService。内容以下:segmentfault
@Component public class HelloServiceFallback implements HelloService { @Override public String hello() { return "hello error"; } @Override public String hello2(@RequestParam(value = "name") String name) { return "hello2 error"; } @Override public String hello3(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age) { return "hello3 error"; } @Override public String hello4(@RequestBody Map<String, Object> parms) { return "hello4 error"; } }
注意给整个类加上@Component 注解,而后就是实现HelloService 中的方法啦。网络
而后咱们须要在HelloService 中的@FeignClient 注解作修改app
@FeignClient(name = "ribbon-provider",fallback = HelloServiceFallback.class)
name 用来指定服务提供者的服务名,fallback 用来指定降级处理的类。这里就是咱们刚刚写HelloServiceFallback。
好了咱们来启动项目测试一下。启动这三个项目,分别是注册中心,服务提供者hystrix-consumer,服务消费者ribbon-provider-9004
而后咱们在界面输入ide
http://localhost:9006/fegin
而后关闭服务提供者,再调接口试试。
能够看到服务提供者的接口断掉以前和以后返回的结果是不同的。说明咱们的熔断处理是生效的啦。
今天就说这么多吧,就先学习一下Hystrix 的基本使用,其余的一些功能,咱们后续再说
代码上传到github:
https://github.com/QuellanAn/springcloud
后续加油♡
欢迎你们关注我的公众号 "程序员爱酸奶"
分享各类学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,同时分享本人及投递的优质技术博文。
若是你们喜欢记得关注和分享哟❤