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 秒。

查看笔记

扫码一下
查看教程更方便