1. 在微服务架构中,根据业务来拆分成一个个的服务,在SpringCloud中用RestTemplate+Ribbon和Feign来实现互相调用。为了保证其高可用,单个服务通常会集群部署。
  2. 由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。
  3. 服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
  4. 为了解决这个问题,业界提出了断路器模型。

一、什么是断路器

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。 -------来自官网

当底层服务出现故障时会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

二、这里我们直接说Feign集成Hystrix

Feign本身就集成了Hystrix,只是默认为关闭状态,我们需要在配置文件中将其打开

feign:hystrix:enabled: true
复制代码

下面我们来看看代码如何写,其实很简单,使用上一篇文章中的cloud-demo-feign项目,application.yml内容如下:

server:port: 8811 # 你的端口
spring:application:name: feign
eureka:client:service-url:defaultZone: http://admin:admin@server1:8761/eureka/,http://admin:admin@server2:8762/eureka/
feign:hystrix:enabled: true
service-eureka-client:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
#com.netflix.loadbalancer.RandomRule #配置规则 随机
#com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
#com.netflix.loadbalancer.RetryRule #配置规则 重试
#com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
#com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
复制代码

项目结构如下:

新建feign断路器接口SchedualClientNameWithFallbackFactory和断路器的实现类HystrixClientFallbackFactory

package com.hewl.hystrix;import com.hewl.feign.SchedualCilentName;public interface SchedualClientNameWithFallbackFactory extends SchedualCilentName {}复制代码
package com.hewl.hystrix;import java.util.HashMap;
import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import com.hewl.feign.SchedualCilentName;import feign.hystrix.FallbackFactory;@Component
public class HystrixClientFallbackFactory implements FallbackFactory<SchedualCilentName> {private static final Logger log = LoggerFactory.getLogger(HystrixClientFallbackFactory.class);@Overridepublic SchedualCilentName create(Throwable cause) {// TODO Auto-generated method stubreturn new SchedualClientNameWithFallbackFactory() {@Overridepublic String testFromClientOne(String name) {log.error("fallback ,the result is : " + cause);// TODO Auto-generated method stubMap<String, Object> map = new HashMap<String, Object>();map.put("ID", -1L);map.put("NAME","");return map.toString();}};}}复制代码

SchedualCilentName类做如下修改,feignclient注解添加fallbackfactory键值对

package com.hewl.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;import com.hewl.hystrix.HystrixClientFallbackFactory;@FeignClient(value="service-eureka-client",fallbackFactory = HystrixClientFallbackFactory.class)
public interface SchedualCilentName {@GetMapping(value = "/test")public String testFromClientOne(@RequestParam("name") String name);}
复制代码

下面启动项目测试

  1. 启动eureka-server服务
  2. 启动eureka-client服务
  3. 启动feign服务

访问http://localhost:8811/test

熔断成功!!!

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

Eclipse(STS) 初次搭建Spring Cloud项目之断路器Hystrix(五)相关推荐

  1. Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)

    一.什么是Feign Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用.Feign通过处理注解,将请 ...

  2. 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)

    告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...

  3. 自己动手,使用Spring Initializr从零开始搭建Spring Cloud项目

    新建Project 这里使用的开发工具是IDEA,JDK版本1.8. 打开IDEA开发工具,File -> New -> Project 然后一步步往下设置,然后到这一步,选择Spring ...

  4. 用idea搭建一个Spring Cloud项目(含代码)

    目录 目标 相关术语介绍 实战 搭建父工程(聚合工程) 搭建注册中心微服务 搭建生产者和消费者微服务 新增Eureka用户认证 新增健康检测 手动维护注册列表 剔除微服务 up微服务 down微服务 ...

  5. Spring boot(6)---在Eclipse中搭建Spring boot 项目

    Spring boot入门:在Eclipse中搭建Spring boot 项目 Eclipse中的STS插件 打开Eclipse-Help-Eclipse Marketplace-popular 下载 ...

  6. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  7. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  8. Linux中部署Spring Cloud项目

    Linux中部署Spring Cloud项目 文章为本人在学习的过程中,记录部署过程,仅供参考学习.因本人经验不足,教程或有不妥之处,还望指正. 保姆级教程,敬请食用!!! 简介 在学习过程中,部署时 ...

  9. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)

    本文承接上文<从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (上)> ...

最新文章

  1. HttpServletResponse 的 sendError( )方法以及常用的HttpServletResponse常量级错误代码
  2. 真正理解 MySQL 的四种隔离级别
  3. 豆瓣评论9.5的《Effective Python》,帮你解决80%难题!
  4. 什么样的征信才算是好的?
  5. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
  6. 【jQuery笔记Part1】05-jQuery解决冲突
  7. 用完HttpWebResponse时别忘了调用Close方法
  8. [deviceone开发]-QQ分享、微信分享和新浪微博分享
  9. koreader下载_Koreader阅读器app免费安装最新版|Koreader阅读器2018手机最新版下载_v1.0_9ht安卓下载...
  10. 做自己----鬼脚七自媒体第一季
  11. 阿里云服务器安装Nginx
  12. python古诗词生成_Python一日一练02----诗词生成器
  13. 12个“无用”之美,你有没有被惊艳到?
  14. 【数据科学赛】CAIL 2022 #八赛道 #NLP #文本匹配 #信息抽取
  15. 【Antv g6】react hook下的useEffect执行初始化渲染 图表渲染了2次的原因及解决办法
  16. 使用BIOS进行键盘输入和磁盘读写
  17. 离职后重回老东家?你需要明白这些事情
  18. HLS/m3u8之sample-aes解密及软件开发
  19. UPA/URA双极化天线的协方差矩阵结构
  20. H.323-SIP信令网关的实现

热门文章

  1. Leaflet中添加标记、折线、圆圈、多边形、弹窗显示点击处坐标
  2. ASP.NET项目在VS中F5与Ctrl+F5的区别
  3. Winform中使用FastReport实现简单的自定义PDF导出
  4. Winform中怎样根据Name获取同窗体的控件
  5. Word中轻松插入本地视频
  6. 如何在 Flutter 和 Dart 中检查数字字符串
  7. python中循环的技巧
  8. APUS 朱辉:移动应用出海的大数据建设挑战
  9. MongoDB进阶-内嵌文档查询
  10. 撩课-Web大前端每天5道面试题-Day39