spring cloud(七):Hystrix的应用

1、概念

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

2、集成

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

        <dependency>

          <groupId>org.springframework.cloud</groupId>

          <artifactId>spring-cloud-starter-hystrix</artifactId>

        </dependency>

        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更强大。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/192383.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

相关推荐

发表回复

登录后才能评论