侧边栏壁纸
博主头像
千异博主等级

学无止境,学以致用,志存高远!

  • 累计撰写 29 篇文章
  • 累计创建 26 个标签
  • 累计收到 0 条评论

微服务——Hystrix熔断和监控

千异
2022-04-29 / 0 评论 / 2 点赞 / 600 阅读 / 2,522 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在服务之间调用的链路上由于网络原因、资源繁忙或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,导致响应时间过长或不可用,此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Hystrix作用
服务熔断和服务监控。

熔断器打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

服务提供方开启熔断步骤:

  1. 在调用远程接口的方法上使用注解@HystrixCommand
//指定此方法出现异常后,将要调用的处理方法,处理方法的返回值和参数类型要与此方法一致
@HystrixCommand(fallbackMethod = "getFallback")//指定异常情况执行的方法
@RequestMapping(value = "/product/get/{id}", method = RequestMethod.GET)
public Product get(@PathVariable("id") Long id) {
...
}

public Product getFallback(@PathVariable("id") Long id) {
...
}
  1. 启动类使用注解开启@EnableHystrix

feign开启客户端熔断机制:

  1. 在yml配置文件中开启,feign自带熔断器,不需要额外引入依赖
feign:
  hystrix:
    enabled: true #feign自带服务熔断,只需要开启。
  1. 只要在已存在的ProductClientService接口上的@FeignClient注解中,加上fallback指定熔断处理类即可: ProductClientServiceFallBack.class
    注意:ProductClientServiceFallBack是ProductClientService的子类,异常处理类需要注入到容器中。
@FeignClient(value = "microservice-product",fallback = ProductClientServiceFallBack.class) //指定调用的微服务名称spring.application.name,出现异常后,对应的方法会交给fallback类去处理
public interface ProductClientService {

    @RequestMapping(value = "/product/get/{id}", method = RequestMethod.GET)
    Product get(@PathVariable("id") Long id);

}

@Component
public class ProductClientServiceFallBack implements ProductClientService{

    @Override
    public Product get(Long id) {
        return null;
    }

}

开启监控

  1. 创建一个新的模块,加入依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--导入 hystrix 与 hystrix-dashboard 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
  1. 启动类上使用@EnableHystrixDashboard注解。
  2. 在需要被监控的微服务中添加依赖:
       <!--监控依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 导入hystrix依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
  1. 在被监控的微服务的yml中添加配置:
# 在被监控服务上添加暴露端点
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

访问http://localhost:8001/actuator/hystrix.stream查看效果。

访问http://localhost:9001/hystrix,端口号是yml中自己配置的,输入http://localhost:8001/actuator/hystrix.stream使用图形界面查看效果。

2
博主关闭了所有页面的评论