博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring cloud学习(五)断路器 Hystrix
阅读量:7112 次
发布时间:2019-06-28

本文共 1830 字,大约阅读时间需要 6 分钟。

断路器 Hystrix

断路器模式 (云计算设计模式)

断路器模式源于Martin Fowler的一文。

在分布式环境中,其中的应用程序执行访问远程资源和服务的操作,有可能对这些操作的失败是由于瞬时故障,如慢的网络连接,超时,或者被过度使用的资源或暂时不可用。这些故障一般之后的短时间内纠正自己。
所谓的断路器模式,就是当某个微服务发生故障时,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。(总结于网上资料)

什么是 Hystrix?

Spring Cloud Netflix Hystrix是分布式系统处理超时和错误的机制。其服务失效判断阈值为 : 在Hystrix里默认是5秒内20个失败。

正常的分布式系统架构图(来源于Hystri官方文档)如下 :

若其中一个服务挂掉之后可能会导致其他调用业务服务的线程大量堵塞,最终导致整个系统瘫痪。Hystrix 允许开发人员提供错误提示信息并开启一个路由回调。如图(来源于Hystri官方文档) :

通过 Feign 使用 Hystri

Feign中已经依赖了Hystrix,所以我们直接调用即可,不必加入 Hystri 依赖。在上一次的 Fegin 工程中使用 Hystri。

  • 创建回调类并实现调用接口类
@Componentpublic class ServiceClientHystrix implements ServiceClient {    @Override    public String printf() {        return "断路器 : 回调函数";    }}
  •  使用@FeignClient注解中的fallback属性指定回调类
@Component@FeignClient(value = "my-service", fallback = ServiceClientHystrix.class)public interface ServiceClient {    @RequestMapping("/service")    String printf();}
  •  为了能够看到回调效果,我们设置 Hystri 的超时时间为1毫秒。在 application.properties添加属性:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1

 

  • 依次启动”服务注册中心”、”服务提供者”、”服务消费者(Feign版)”,连续多次访问 。

添加 Hystrix Dashboard 监控

  • 添加依赖
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-hystrix-dashboard

 

  • 在启动类添加启动注解@EnableHystrixDashboard

  • 再次启动”服务消费者”,访问

  • 在URL中输入监控URL : 同时多次访问 并观察监控仪表板的变化。

发现的问题

  • 问题描述:Fegin第一次启动请求失败?
  • 问题原因:首次请求往往会比较慢(Spring的懒加载机制,需要实例化一些类),因此请求时间往往大于 Hystrix 的默认超时时间(1秒)。
  • 解决方法:延长 Hystrix 的超时时间
/** * default 是默认所有请求;具体某个请求则修改 default 为相应的访问即可 */hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

 

转载于:https://www.cnblogs.com/MaxElephant/p/8109220.html

你可能感兴趣的文章
工作经验总结
查看>>
Oracle 触发器 插入,更新,删除,数据同步,两表同步
查看>>
学习从模仿开始 —— 模仿UI 导航帖
查看>>
C#接口-接口作为参数
查看>>
MBR
查看>>
使用数据视图
查看>>
坚持的力量 第二十篇
查看>>
Understanding Linux /proc/cpuinfo
查看>>
mybatis springmvc调用oracle存储过程,返回记录集
查看>>
openSession()和getCureentSession()的区别
查看>>
kvm 克隆虚拟机
查看>>
(转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
查看>>
Controller 接口控制器详解
查看>>
【转】【MySQL】mysql 通过bin-log恢复数据方法详解
查看>>
linux上安装启动elasticsearch-5.5.1完整步骤
查看>>
请求失败或服务未及时响应。有关详细信息,请参见事件日志或其他适用的错误日志...
查看>>
Silverlight 4 MVVM开发方式(一)小黑端
查看>>
公告:CSDN博客频道新功能正式上线!
查看>>
Web服务的体系架构
查看>>
linux下apache的使用
查看>>