Spring Boot Hystrix
Hystrix 是 Netflix 的一个库。 Hystrix 隔离服务之间的访问点,停止它们之间的级联故障并提供回退选项。
例如,当调用第三方应用程序时,发送响应需要更多时间。 因此,此时,控件会转到回退方法并将自定义响应返回给我们的应用程序。
在本章中,我们将看到如何在 Spring Boot 应用程序中实现 Hystrix。
首先,我们需要在构建配置文件中添加 Spring Cloud Starter Hystrix 依赖项。
Maven 用户可以在 pom.xml 文件中添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
Gradle 用户可以在 build.gradle 文件中添加如下依赖
compile('org.springframework.cloud:spring-cloud-starter-hystrix')
现在,将 @EnableHystrix
注解添加到主 Spring Boot 应用程序类文件中。 @EnableHystrix
注解用于在 Spring Boot 应用程序中启用 Hystrix 功能。
下面给出主要的 Spring Boot 应用程序类文件代码
package com.jiyik.hystrixapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableHystrix
public class HystrixappApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixappApplication.class, args);
}
}
现在编写一个简单的 Rest Controller,使其在请求时间 3 秒后返回字符串。
@RequestMapping(value = "/")
public String hello() throws InterruptedException {
Thread.sleep(3000);
return "Welcome Hystrix";
}
现在,为 Rest API 添加 @Hystrix
命令和 @HystrixProperty
,并以毫秒为单位定义超时值。
@HystrixCommand(fallbackMethod = "fallback_hello", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
接下来,如果请求需要很长时间才能响应,则定义回退方法 fallback_hello()
。
private String fallback_hello() {
return "请求失败。 需要很长时间才能响应";
}
包含 REST API 和 Hystrix 属性的完整 Rest Controller 类文件如下所示
@RequestMapping(value = "/")
@HystrixCommand(fallbackMethod = "fallback_hello", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
public String hello() throws InterruptedException {
Thread.sleep(3000);
return "Welcome Hystrix";
}
private String fallback_hello() {
return "请求失败。 需要很长时间才能响应";
}
在此示例中,REST API 编写在主 Spring Boot 应用程序类文件本身中。
package com.jiyik.hystrixapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.web.bind.annotation.RequestMapping;
@SpringBootApplication
@EnableHystrix
public class HystrixappApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixappApplication.class, args);
}
@RequestMapping(value = "/")
@HystrixCommand(fallbackMethod = "fallback_hello", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
public String hello() throws InterruptedException {
Thread.sleep(3000);
return "Welcome Hystrix";
}
private String fallback_hello() {
return "请求失败。 需要很长时间才能响应";
}
}
现在,我们可以创建一个可执行的 JAR 文件,并使用以下 Maven 或 Gradle 命令运行 Spring Boot 应用程序。
对于 Maven,使用下面给出的命令
$ mvn clean install
成功之后,我们可以在 target 目录下找到 JAR 文件。
对于 Gradle,使用下面给出的命令
$ gradle clean build
这里我们使用 IDEA 来启动服务(读者也可以使用上面两种方式中的一种生成可执行 jar 包)
现在,从Web 浏览器中点击 URL http://localhost:8080/
,然后查看 Hystrix 响应。 API 需要 3 秒响应,但 Hystrix 超时为 1 秒。