千家信息网

spring cloud(七):Hystrix的应用

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,1、概念熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。除了熔断的功能还有服务降级、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。2、
千家信息网最后更新 2025年01月31日spring cloud(七):Hystrix的应用

1、概念

熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。除了熔断的功能还有服务降级、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。

2、集成

a、工程的 pom.xml 的 dependency 节点中引入 spring-cloud-starter-hystrix 依赖:

  org.springframework.cloud

  spring-cloud-starter-hystrix

b、在启动类中通过注解@EnableCircuitBreaker ,启动熔断器

/**

* 使用@EnableCircuitBreaker注解开启断路器功能

* @author eacdy

*/

@SpringBootApplication

@EnableDiscoveryClient

@EnableCircuitBreaker

public class HystrixApplication {

/**

* 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.

* @return restTemplate

*/

@Bean

@LoadBalanced

public RestTemplate restTemplate() {

return new RestTemplate();

}


public static void main(String[] args) {

SpringApplication.run(HystrixApplication.class, args);

}

}

c、编写服务类,写个回退方法,通过命令模式,指定发生异常需要回退的方法

@Service

public class HystrixService {

@Autowired

private RestTemplate restTemplate;

private static final Logger LOGGER = LoggerFactory.getLogger(RibbonHystrixService.class);


@HystrixCommand(fallbackMethod = "fallback")

public User findById(Long id) {

return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);

}


public User fallback(Long id) {

User user = new User();

user.setId(-1L);

user.setUsername("default username");

user.setAge(0);

return user;

}

}

d、编写控制器类,调用服务类

@RestController

public class HystrixController {

@Autowired

private HystrixService hystrixService;


@GetMapping("/ribbon/{id}")

public User findById(@PathVariable Long id){

return this.hystrixService.findById(id);

}

}

e、编写application.yml

server:

port: 9413

spring:

application:

name: microservice-hystrix

eureka:

client:

serviceUrl:

defaultZone: http://discovery:8761/eureka/

instance:

hostname: hystrix

3、启动应用,同时启动两个相同的应用,只是端口不同,访问http://hystrix:9413/hystrix/1,则正常显示内容,当把服务设置超时,则会调用回退方法。

4、总结

熔断器有效的解决了因为服务故障,请求积压,导致服务崩溃,同时提高了用户的体验;上面的集成是使用了熔断器的命令模式,如果项目里面用的是feign,则自带了回退机制,不过个人推荐还是用命令模式,参数设置灵活,可以设置并发数、线程执行超时时间、并发执行最大线程数、线程存活时间、线程执行超时是否中断,api更强大。

0