1、启动【服务中心】集群,工程名:springcloud-eureka-server

2、启动【服务提供者】集群,工程名:springcloud-eureka-client

3、启动【服务消费者】,工程名:springcloud-eureka-feign

4、未加入熔断机制,【服务提供者】出现问题,对【服务消费者】的影响

4.1、停掉【服务提供者】集群中的其中一个服务。本例:停掉端口为 52602 这个服务。

4.2、打开浏览器,访问 http://localhost:52620/feignInfo,多次刷新该地址

调用 52601、52603 服务是正常的,但是调用52602服务的时候,出现了阻塞等待,并最终返回了红框内的错误信息。

假如这是正式的生产环境,访问量很大的情况下,那么就会有很多请求阻塞。这会造成【服务消费者】服务器内存消耗陡增,导致应用崩溃。如果有其他应用需要【服务消费者】返回资源信息,那么调用【服务消费者】的应用也会出现阻塞。这就导致了连锁反应,也就是所谓的雪崩。

所以,为了避免这种悲剧发生。顺应而生的出现了熔断保护机制。即:访问不通时,要及时作出响应,而不是等待至超时。

5、修改【服务消费者】,加入熔断机制

5.1、打开工程:springcloud-eureka-feign

5.2、修改工程 pom.xml 文件,追加 Hystrix 依赖,添加如下内容:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

5.3、修改工程启动类,添加注解 @EnableHystrix

package com.miniooc.eurekafeign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients; /**
* EurekaFeignApplication
* 应用程序启动类,程序入口
*
* @author 宋陆
* @version 1.0.0
*/
@EnableHystrix // Feign默认是开启,这个注解可以不加的
@EnableDiscoveryClient // 启用 Eureka 服务发现
@EnableFeignClients // 启用 Feign
@SpringBootApplication
public class EurekaFeignApplication { public static void main(String[] args) {
SpringApplication.run(EurekaFeignApplication.class, args);
} }

5.4、修改【服务消费者】服务类, EurekaFeignService,追加 fallback 配置

package com.miniooc.eurekafeign.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping; /**
* EurekaFeignService
* 服务消费者,调用服务提供者提供的服务,实现业务
*
* @author 宋陆
* @version 1.0.0
*/
@FeignClient(value = "EUREKA-CLIENT", fallback = EurekaFeignServiceFailure.class) // 调用的服务的名称
public interface EurekaFeignService { @RequestMapping(value = "/info")
String getInfo(); }

5.5、新增【服务消费者】服务调用失败,回调处理类,EurekaFeignServiceFailure

package com.miniooc.eurekafeign.service;

import org.springframework.stereotype.Service;

/**
* EurekaFeignServiceFailure
* 服务消费者,调用服务提供者提供的服务失败,回调处理类
*
* @author 宋陆
* @version 1.0.0
*/
@Service
public class EurekaFeignServiceFailure implements EurekaFeignService { @Override
public String getInfo() {
String message = "网络繁忙,请稍后再试-_-。PS:服务消费者自己提供的信息";
return message;
} }

5.6、修改工程配置文件 application.yml, 开启 hystrix,追加如下配置

feign:
hystrix:
enabled: true

6、加入熔断机制后,【服务提供者】出现问题,对【服务消费者】的影响

6.1、重启【服务提供者】集群,重启【服务消费者】

6.2、停掉【服务提供者】集群中的其中一个服务。本例:停掉端口为 52602 这个服务。

6.3、打开浏览器,访问 http://localhost:52620/feignInfo,多次刷新该地址

调用 52601、52603 服务是正常的,调用52602服务的时候,没有出现阻塞等待,而是返回了【服务消费者】自己提供的返回信息

【服务消费者】加入熔断机制结束

最新文章

  1. jQuery-easyui实现关闭全部tabs
  2. js 中使用el表达式 关键总结:在js中使用el表达式一定要使用双引号
  3. VM 虚拟机 Error 1324. The path My Documents contains a invalid chara 。
  4. (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
  5. Nginx基础知识————生成自签名ca 证书 使nginx 支持https
  6. js对象的相关操作方法
  7. Nginx中的upstream轮询机制介绍
  8. jeecg团队招新人(5人)
  9. centos 5.x 升级openssl
  10. Loadrunner 录制成功,但是脚本并没有产生
  11. Swift编程语言的相关资料
  12. 单元测试过多,导致The configured user limit (128) on the number of inotify instances has been reached.
  13. 进制与进制转换DAY2
  14. work flow 工作流程
  15. 计算机网络协议包头赏析-IP
  16. idea中 mybatis的debug文件需要放在src的目录下 不能加多余的路径
  17. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)
  18. Centos7.2安装ruby用于爬虫脚本
  19. IT人士级别的划分
  20. 如何推行Code Review

热门文章

  1. Java 并发系列之四:java 多线程
  2. 紧随时代的步伐--Java8之Lambda表达式的使用
  3. Redis 动态字符串 SDS 源码解析
  4. github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载
  5. [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)
  6. Python3 CGI编程实现教程
  7. BJFU-225-基于链表的两个递增有序序列的合并
  8. Lua代码编写规范
  9. LOJ2257 SNOI2017 遗失的答案 容斥、高维前缀和
  10. 『正睿OI 2019SC Day6』