【SpringCloud】第四篇:断路器(Hystrix)
前言:
必需学会SpringBoot基础知识
简介:
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。
工具:
JDK8
apache-maven-3.5.2
IntelliJ IDEA 2017.3 x64
一、断路器简介
Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的; 参考图片: http://projects.spring.io/spring-cloud/spring-cloud.html#_circuit_breaker_hystrix_clients
简单来说: 在架构里面那个服务器挂了, 就会返回报错.
二、准备工作
本篇是基于第一篇为基础, 首先, 启动 eureka-server:8761 和 eureka-client 项目的dev:8762
三、在ribbon使用断路器
3.1 pom.xml 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
3.2 启动类追加@EnableHystrix注解开启Hystrix
package com.lwc; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix; /**
* @author Eddie
*/
@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaRibbonApplication { public static void main(String[] args) {
SpringApplication.run(EurekaRibbonApplication.class, args);
}
}
3.3 Service改造, 追加功能
package com.lwc.service; /**
* @author eddie.lee
* @Package com.lwc.service
* @ClassName RibbonService
* @description
* @date created in 2018-03-26 19:55
* @modified by
*/
public interface RibbonService { String ribbonService(String name); /**
* Hystrix 熔断 返回错误信息
*/
String hystrixError(String name);
}
package com.lwc.service.impl; import com.lwc.service.RibbonService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; /**
* @author eddie.lee
* @Package com.lwc.service.impl
* @ClassName RibbonServiceImpl
* @description
* @date created in 2018-03-26 19:57
* @modified by
*/
@Service
public class RibbonServiceImpl implements RibbonService { @Autowired
private RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hystrixError")
@Override
public String ribbonService(String name) {
final String url = "http://eureka-client/eureka/client?name=" + name;
return restTemplate.getForObject(url, String.class);
} @Override
public String hystrixError(String name) {
return "hi, " + name + " ,sorry, hystrix error!";
}
}
3.4 浏览器查看 A:成功, B:失败 (先是启动相关服务, 请求一次地址, 然后在关闭client服务器, 在请求一次地址)
A: http://localhost:8764/eureka/ribbon?name=eddie
hi eddie, i am from port:8762
B: http://localhost:8764/eureka/ribbon?name=eddie
hi, eddie ,sorry, hystrix error!
四、Feign中使用断路器
4.1 pom.xml添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
4.2 *.yml添加开启断路器
如果是properties文件,请在文件中加入:
feign.hystrix.enabled=true
如果是yml文件,请在文件中加入:
feign:
hystrix:
enabled: true
4.3 FeignClientService 改造, 添加 fallback 错误返回
package com.lwc.service; import com.lwc.config.FeignClientServiceHystric;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; /**
* @author eddie.lee
* @Package com.lwc.service
* @ClassName FeignClientService
* @description
* @date created in 2018-03-27 10:43
* @modified by
*/
@FeignClient(value = "eureka-client", fallback = FeignClientServiceHystric.class)
public interface FeignClientService { @GetMapping("/eureka/client")
String feignToClientByName(@RequestParam("name") String name); }
package com.lwc.config; import com.lwc.service.FeignClientService;
import org.springframework.stereotype.Component; /**
* @author eddie.lee
* @Package com.lwc.config
* @ClassName FeignClientServiceHystric
* @description
* @date created in 2018-03-27 15:21
* @modified by
*/
@Component
public class FeignClientServiceHystric implements FeignClientService { @Override
public String feignToClientByName(String name) {
return "Hystric Error, Sorry " + name;
} }
4.4 浏览器查看 A:成功, B:失败 (先是启动相关服务, 请求一次地址, 然后在关闭client服务器, 在请求一次地址)
A: http://localhost:8765/eureka/feign?name=eddie
hi eddie, i am from port:8762
B: http://localhost:8765/eureka/feign?name=eddie
Hystric Error, Sorry eddie
五、Hystrix Dashboard (断路器:Hystrix 仪表盘)
eureka-ribbon 或者 eureka-feign 改造, 添加仪表盘
5.1 pom.xml添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
5.2 启动类添加注解
@EnableHystrix@EnableHystrixDashboard
5.3 浏览器查看
地址: http://localhost:8765/hystrix.stream
输入: http://localhost:8765/hystrix.stream
Title:{name}
测试: 请求 http://localhost:8765/eureka/feign?name=eddie 就会在仪表盘出现对应数据, 比如次数
5.4 错误
提示: Unable to connect to Command Metric Stream.
解决: 查看是否缺少依赖,或者注解
六、参考资料
eureka-feign
http://localhost:8765/eureka/feign?name=eddie
eureka-ribbon
http://localhost:8764/eureka/ribbon?name=eddie
标签
4-1, 4-2
源码下载
https://github.com/eddie-code/SpringCloudDemo#springclouddemo
【SpringCloud】第四篇:断路器(Hystrix)的更多相关文章
- 跟我学SpringCloud | 第四篇:熔断器Hystrix
跟我学SpringCloud | 第四篇:熔断器Hystrix 1. 熔断器 服务雪崩 在正常的微服务架构体系下,一个业务很少有只需要调用一个服务就可以返回数据的情况,这种比较常见的是出现在demo中 ...
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
- SpringCloud教程 | 第四篇:断路器(Hystrix)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
- SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f4-hystrix/ 本文出自方志朋的博客 在微服务架构中, ...
- springcloud 入门 6 (断路器hystrix)
hystrix:断路器 断路器是为了解决服务故障的“雪崩”, 雪崩是指,由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请 ...
- Spring Cloud学习笔记【四】断路器Hystrix
雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因 “服务提供者” 的不可用导致 “服务消 ...
- 跟我学SpringCloud | 第十四篇:Spring Cloud Gateway高级应用
SpringCloud系列教程 | 第十四篇:Spring Cloud Gateway高级应用 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 ...
随机推荐
- 关于最新版AFNetworking(3.0)上传多张图片的问题
最新版的AF已经废弃了很多以前的类,所以很多以前的方法都不能用了,当然最主要还是为了适应ipV6所做的更改.楼主最近正在写多张图片上传,碰到了一些问题,解决之后直接封装了一个方法,废话有点多了,上代码 ...
- 为GRIDVIEW“删除”列添加确认对话框
如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:1.继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具 ...
- wshShell.SendKeys模拟键盘操作
Dim wshShellSet wshShell = CreateObject("Wscript.Shell")wshShell.SendKeys "{ENTER}&qu ...
- AtomicStampedReference解决ABA问题
在运用CAS做Lock-Free操作中有一个经典的ABA问题: 线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值 ...
- 复习宝典之Git分布式版本控制
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第三章:Git分布式版本控制 1)git文件状态 git中的文件有以下几种状态: 未跟踪(untrack):表示文件为新增加的. 已修改 ...
- wait();notify();简单例子
public class Test1{ /** * @param args */ public static void main(String[] args) { new Thread(new Thr ...
- python函数名应用
函数名的应用 函数名 的应用分类: 函数就是一个特殊的变量(可以看成一个变量来用) *函数名对应函数的内存地址 *函数名可以做为容器类数据的元素 *函数名可以作为函数的参数 *函数名可以作为函数的返回 ...
- Mint-UI 的 DatetimePicker 日期时间插件的安装与使用
简介:Mint-UI是饿了么出品的基于vue的移动端组件库(element-ui是桌面端) 官网:http://mint-ui.github.io/docs/#/zh-cn2 项目环境:vue-cli ...
- thinkphp5.0上对redis的具体操作
一.环境搭建 首先先安装composer.thinkphp5.0版本.和redis的windows版本的redis程序或者linux版本的redis程序,linux安装教程: https://www. ...
- STM32(11)——DMA
简介: DMA:Direct Memory Access,直接存储器访问.DMA传输数据从一个地址空间复制到另外一个地址空间.当CPU初始化这个传输动作,传输动作本身就是DMA控制器来实现和完成.典型 ...