文章目录

  • 简介
  • 实验步骤
    • 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-readendpoint回去调用bookstore的/recommended,当访问bookstore的/recommended失败时,会触发熔断,转而调用一个fallback方法。

bookstore应用

初始化应用

利用Spring Initializr初始化我们的应用,在这里后端服务只要是一个普通的Web服务就可以了,所以添加一个Spring Web依赖即可:

将得到的压缩包解压后导入到idea中。

主程序

主程序提供了一个/recommendedendpoint,完整代码如下:

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-readendpoint,该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初体验相关推荐

  1. SpringCloud Zuul初体验

    文章目录 简介 Zuul服务搭建 后端服务book搭建 创建一个web应用 主程序 配置application.properties 访问book服务 Zuul服务搭建 创建应用 添加一个pre过滤器 ...

  2. SpringCloud Eureka初体验

    文章目录 Eureka Server 创建Eureka Server项目 配置application.properties 增加@EnableEurekaServer注解 访问Eureka Serve ...

  3. springcloud初体验(一句话,真香!)

    文章目录 一.微服务简介 Ⅰ.我对微服务的理解 Ⅱ.为什么要使用微服务? 二.spring cloud Ⅰ.springcloud介绍 Ⅱ.boot和cloud的版本选型 三.springcloud初 ...

  4. 【你好Resilience4j】一:Resilience4j之初体验

    每日一句 健身和读书,是世界上成本最低的升值方式:而懒,是你通往牛逼的路上最大的敌人. 目录 为什么要使用Resilience4j Resilience4j介绍 Resilience4j模块 初体验 ...

  5. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  6. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  7. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  8. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  9. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

最新文章

  1. a标签被选择的底色_实施特殊管理,婴配乳粉标签书写有规矩(下)
  2. Hadoop API编程——FileSystem操作
  3. 使用qtcreator中的git_Git中submodule的使用
  4. poj 2985(并查集+线段树求K大数)
  5. python自动化办公:word篇。职场高手不是梦。
  6. 不平等博弈问题学习记录(二)(对于超实数在博弈下左右相等的扩充)
  7. Java 9 中的9个新特性
  8. java中IO流的标准异常处理代码
  9. java框架学习日志-2
  10. linux安装tomcat后启动报错Cannot find ./catalina.sh的解决方法
  11. 标准化设计解决方案 - 标记语言和样式手册 表单
  12. linux查看网卡的驱动命令行,linux查看网卡驱动模块信息
  13. 联想打印机 android,小新联想打印机
  14. ubuntu 开发java_Ubuntu下搭建java开发环境
  15. Linux实用教程(第三版)
  16. 在计算机中安装Manjaro
  17. java web查询某个时间段记录
  18. SharedPreferences和SQlite数据库
  19. 如果张柏芝的孩子长大
  20. storyboard搭建项目_轻松搞定一人一个storyboard开发

热门文章

  1. python条形图间距-python matplotlib做对比条形图
  2. python中文编辑器推荐-八款Python编辑器对比介绍推荐
  3. python第三方库numpy-谁能介绍下Python生态中的第三方库NumPy
  4. python贴吧发帖脚本-分享用Python写的99收抢单小脚本,仅供学习
  5. python处理excel大数据-当Excel遇到大数据问题,是时候用Python来拯救了
  6. python代码大全表解释-python操作列表的函数使用代码详解
  7. 不想学python-没想到,学会Python即使不做程序员都能月入过万!
  8. python简单代码编写-新手写Python,8招让你的代码更简洁更Pythonic!
  9. 函数式编程语言python-用Python进行基础的函数式编程的教程
  10. c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...