SpringCloud Hystrix初体验
文章目录
- 简介
- 实验步骤
- bookstore应用
- 初始化应用
- 主程序
- 应用配置
- 访问应用
- reading应用
- 初始化应用
- 主程序
- BookService
- 应用配置
- 运行应用
- 参考资料
简介
Hystrix是SpringCloud Netflix下的一个库,实现了Circuit Breaker(电路熔断器)模式。关于Circuit Breaker模式的原理,可以参考:Circuit Breaker(电路熔断器)模式原理 。
实际上SpringCloud支持多种Circuit Breaker实现,如:
- Netfix Hystrix
- Resilience4J
- Sentinel
- Spring Retry
本文主要介绍Netfix Hystrix的用法。
实验步骤
我们需要两个应用,分别为bookstore和reading,bookstore作为被访问的应用,reading为应用了Hystrix的应用,reading应用的/to-read
endpoint回去调用bookstore的/recommended
,当访问bookstore的/recommended
失败时,会触发熔断,转而调用一个fallback方法。
bookstore应用
初始化应用
利用Spring Initializr初始化我们的应用,在这里后端服务只要是一个普通的Web服务就可以了,所以添加一个Spring Web
依赖即可:
将得到的压缩包解压后导入到idea中。
主程序
主程序提供了一个/recommended
endpoint,完整代码如下:
package com.example.hystrixcircuitbreakerbookstore;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;@RestController
@SpringBootApplication
public class HystrixCircuitBreakerBookstoreApplication {@RequestMapping(value = "/recommended")public String readingList(){return "Spring in Action (Manning), Cloud Native Java (O'Reilly), Learning Spring Boot (Packt)";}public static void main(String[] args) {SpringApplication.run(HystrixCircuitBreakerBookstoreApplication.class, args);}
}
应用配置
在src\main\resources\application.properties
中为应用指定一个可用的端口,如下:
server.port=8300
完成以上步骤以后就可以把应用运行起来了。
访问应用
打开浏览器,输入地址http://localhost:8300/recommended
,出现类似以下界面则表示应用正常运行:
reading应用
初始化应用
利用Spring Initializr初始化我们的应用,这里我们添加如下两个依赖:
主程序
主程序提供一个/to-read
endpoint,该endpoint会尝试去bookstore应用中获取数据(见下文),完整代码如下:
package com.example.hystrixcircuitbreakerreading;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.web.client.RestTemplate;@EnableCircuitBreaker
@RestController
@SpringBootApplication
public class HystrixCircuitBreakerReadingApplication {@Autowiredprivate BookService bookService;@Beanpublic RestTemplate rest(RestTemplateBuilder builder) {return builder.build();}@RequestMapping("/to-read")public String toRead() {return bookService.readingList();}public static void main(String[] args) {SpringApplication.run(HystrixCircuitBreakerReadingApplication.class, args);}
}
BookService
Spring Cloud Netflix Hystrix会找到标记了注解@HystrixCommand
的方法,并把这些方法代理起来,从而让Hystrix能够监控它。Hystrix只会监控@Component
和@Service
类中的方法,当监控到某个方法的失败调用次数达到一定阈值的时候,就会断开电路,后续对该方法的调用都会立即失败,并把对该方法的调用重定向到一个fallback方法中。在BookService
类中,我们把readingList
方法带上@HystrixCommand
添加到Hystrix的监控中,当该方法执行失败时会被熔断,熔断后对该方法的调用会被重定向到fallback方法reliable
中,完整代码如下:
package com.example.hystrixcircuitbreakerreading;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;@Service
public class BookService {private final RestTemplate restTemplate;public BookService(RestTemplate rest) {this.restTemplate = rest;}@HystrixCommand(fallbackMethod = "reliable")public String readingList() {URI uri = URI.create("http://localhost:8300/recommended");return this.restTemplate.getForObject(uri, String.class);}public String reliable() {return "Cloud Native Java (O'Reilly)";}
}
应用配置
在src\main\resources\application.properties
中为应用指定一个可用的端口,如下:
server.port=8301
完成以上步骤以后就可以把应用运行起来了。
运行应用
打开浏览器,输入地址http://localhost:8301/to-read
,此时bookstore应用正常运作,因此能从bookstore中拿到数据,显示出来:
将bookstore应用关掉,此时再访问该接口,发现该接口已经被熔断,显示的结果的fallback方法reliable
的输出:
参考资料
Circuit Breaker(电路熔断器)模式原理
https://spring.io/guides/gs/circuit-breaker/
SpringCloud Hystrix初体验相关推荐
- SpringCloud Zuul初体验
文章目录 简介 Zuul服务搭建 后端服务book搭建 创建一个web应用 主程序 配置application.properties 访问book服务 Zuul服务搭建 创建应用 添加一个pre过滤器 ...
- SpringCloud Eureka初体验
文章目录 Eureka Server 创建Eureka Server项目 配置application.properties 增加@EnableEurekaServer注解 访问Eureka Serve ...
- springcloud初体验(一句话,真香!)
文章目录 一.微服务简介 Ⅰ.我对微服务的理解 Ⅱ.为什么要使用微服务? 二.spring cloud Ⅰ.springcloud介绍 Ⅱ.boot和cloud的版本选型 三.springcloud初 ...
- 【你好Resilience4j】一:Resilience4j之初体验
每日一句 健身和读书,是世界上成本最低的升值方式:而懒,是你通往牛逼的路上最大的敌人. 目录 为什么要使用Resilience4j Resilience4j介绍 Resilience4j模块 初体验 ...
- 苹果电脑安装python3密码_mac系统安装Python3初体验
前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...
- MapReduce编程初体验
需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...
- 小程序 缩放_缩放流星应用程序的初体验
小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...
- 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...
最新文章
- a标签被选择的底色_实施特殊管理,婴配乳粉标签书写有规矩(下)
- Hadoop API编程——FileSystem操作
- 使用qtcreator中的git_Git中submodule的使用
- poj 2985(并查集+线段树求K大数)
- python自动化办公:word篇。职场高手不是梦。
- 不平等博弈问题学习记录(二)(对于超实数在博弈下左右相等的扩充)
- Java 9 中的9个新特性
- java中IO流的标准异常处理代码
- java框架学习日志-2
- linux安装tomcat后启动报错Cannot find ./catalina.sh的解决方法
- 标准化设计解决方案 - 标记语言和样式手册 表单
- linux查看网卡的驱动命令行,linux查看网卡驱动模块信息
- 联想打印机 android,小新联想打印机
- ubuntu 开发java_Ubuntu下搭建java开发环境
- Linux实用教程(第三版)
- 在计算机中安装Manjaro
- java web查询某个时间段记录
- SharedPreferences和SQlite数据库
- 如果张柏芝的孩子长大
- storyboard搭建项目_轻松搞定一人一个storyboard开发
热门文章
- python条形图间距-python matplotlib做对比条形图
- python中文编辑器推荐-八款Python编辑器对比介绍推荐
- python第三方库numpy-谁能介绍下Python生态中的第三方库NumPy
- python贴吧发帖脚本-分享用Python写的99收抢单小脚本,仅供学习
- python处理excel大数据-当Excel遇到大数据问题,是时候用Python来拯救了
- python代码大全表解释-python操作列表的函数使用代码详解
- 不想学python-没想到,学会Python即使不做程序员都能月入过万!
- python简单代码编写-新手写Python,8招让你的代码更简洁更Pythonic!
- 函数式编程语言python-用Python进行基础的函数式编程的教程
- c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...