Eclipse(STS) 初次搭建Spring Cloud项目之断路器Hystrix(五)
- 在微服务架构中,根据业务来拆分成一个个的服务,在SpringCloud中用RestTemplate+Ribbon和Feign来实现互相调用。为了保证其高可用,单个服务通常会集群部署。
- 由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。
- 服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
- 为了解决这个问题,业界提出了断路器模型。
一、什么是断路器
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);}
复制代码
下面启动项目测试
- 启动eureka-server服务
- 启动eureka-client服务
- 启动feign服务
访问http://localhost:8811/test
熔断成功!!!
转载于:https://juejin.im/post/5d01f057f265da1bd04edac8
Eclipse(STS) 初次搭建Spring Cloud项目之断路器Hystrix(五)相关推荐
- Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)
一.什么是Feign Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用.Feign通过处理注解,将请 ...
- 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)
告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...
- 自己动手,使用Spring Initializr从零开始搭建Spring Cloud项目
新建Project 这里使用的开发工具是IDEA,JDK版本1.8. 打开IDEA开发工具,File -> New -> Project 然后一步步往下设置,然后到这一步,选择Spring ...
- 用idea搭建一个Spring Cloud项目(含代码)
目录 目标 相关术语介绍 实战 搭建父工程(聚合工程) 搭建注册中心微服务 搭建生产者和消费者微服务 新增Eureka用户认证 新增健康检测 手动维护注册列表 剔除微服务 up微服务 down微服务 ...
- Spring boot(6)---在Eclipse中搭建Spring boot 项目
Spring boot入门:在Eclipse中搭建Spring boot 项目 Eclipse中的STS插件 打开Eclipse-Help-Eclipse Marketplace-popular 下载 ...
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内
背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...
- Linux中部署Spring Cloud项目
Linux中部署Spring Cloud项目 文章为本人在学习的过程中,记录部署过程,仅供参考学习.因本人经验不足,教程或有不妥之处,还望指正. 保姆级教程,敬请食用!!! 简介 在学习过程中,部署时 ...
- 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)
本文承接上文<从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (上)> ...
最新文章
- HttpServletResponse 的 sendError( )方法以及常用的HttpServletResponse常量级错误代码
- 真正理解 MySQL 的四种隔离级别
- 豆瓣评论9.5的《Effective Python》,帮你解决80%难题!
- 什么样的征信才算是好的?
- 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
- 【jQuery笔记Part1】05-jQuery解决冲突
- 用完HttpWebResponse时别忘了调用Close方法
- [deviceone开发]-QQ分享、微信分享和新浪微博分享
- koreader下载_Koreader阅读器app免费安装最新版|Koreader阅读器2018手机最新版下载_v1.0_9ht安卓下载...
- 做自己----鬼脚七自媒体第一季
- 阿里云服务器安装Nginx
- python古诗词生成_Python一日一练02----诗词生成器
- 12个“无用”之美,你有没有被惊艳到?
- 【数据科学赛】CAIL 2022 #八赛道 #NLP #文本匹配 #信息抽取
- 【Antv g6】react hook下的useEffect执行初始化渲染 图表渲染了2次的原因及解决办法
- 使用BIOS进行键盘输入和磁盘读写
- 离职后重回老东家?你需要明白这些事情
- HLS/m3u8之sample-aes解密及软件开发
- UPA/URA双极化天线的协方差矩阵结构
- H.323-SIP信令网关的实现