本文主要是介绍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初体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!