Spring Cloud Netflix Hystrix 是一个用于实现断路器模式的库,它可以帮助您处理微服务架构中的故障和超时情况,提高系统的可用性和稳定性。以下是一个简单的 Spring Cloud Netflix Hystrix 示例,演示如何使用 Hystrix 创建和保护一个微服务。
首先,创建一个 Spring Boot 项目:
1. 创建一个新的 Spring Boot 项目并添加以下依赖:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
```
这些依赖用于集成 Eureka 客户端和 Hystrix。
2. 在 `application.properties` 或 `application.yml` 文件中配置 Eureka 客户端信息:
```yaml
spring:
application:
name: hystrix-demo-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
```
接下来,创建一个简单的 REST 服务:
```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class HystrixDemoServiceApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDemoServiceApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Hello from Hystrix Demo Service!";
}
}
```
接下来,创建一个使用 Hystrix 断路器的客户端:
```java
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableCircuitBreaker
public class HystrixClientController {
@Autowired
private HelloService helloService;
@GetMapping("/invoke")
public String invokeService() {
return helloService.getHello();
}
@Service
class HelloService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "fallbackHello")
public String getHello() {
return restTemplate.getForObject("http://hystrix-demo-service/hello", String.class);
}
public String fallbackHello() {
return "Fallback Hello";
}
}
}
```
上述代码中,我们使用了 `@EnableCircuitBreaker` 注解启用 Hystrix 断路器,然后创建了一个 `HelloService` 类,该类使用 `@HystrixCommand` 注解标记的方法来调用远程服务。如果远程服务调用失败,它将使用 `fallbackHello` 方法提供一个备用响应。
最后,启动 Eureka 服务器、Hystrix 客户端和服务提供者。然后,访问 Hystrix 客户端的 `/invoke` 端点(例如,`http://localhost:8080/invoke`),如果服务提供者正常工作,您将看到来自服务提供者的响应消息。然后,停止服务提供者并再次访问 `/invoke`,您将看到来自 `fallbackHello` 方法的响应,这是 Hystrix 提供的断路器保护。
这个示例演示了如何使用 Spring Cloud Netflix Hystrix 实现断路器模式来处理故障情况。在实际项目中,您可以根据需要添加更多的断路器保护和自定义回退逻辑。
11-04
1013
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-12
229
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)