(一)理论知识
1.Hystrix工作原理
熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压,最终导致自身服务瘫瘓的一种机制,它的功能类似电路的保险丝,其目的是为了阻断故障,从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件,具有服务容错保护功能。
在高流量情况下,一个后端的依赖延迟可能会导致所有服务的资源在数秒内变的饱和,这也就意味着,后续如果再有请求将无法提供服务,应用会出现故障。比故障更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,从而备份队列、线程和其他资源,从而导致整个系统出现更多级联故障,如图1所示。
图1 高流量情况下导致整个系统出现更多级联故障
Hystrix的出现就是为了解决上述问题的,它封装了每个依赖项,每个依赖项彼此隔离,当延迟发生时,它会被限制在资源中,并包含回退逻辑,该逻辑决定在依赖发生任何类型故障时应作出何种响应,如图2所示。
图2 回退逻辑
(二)开发流程
1.搭建eureka-server
(1)创建项目,引入依赖
使用Spring Initializr方 式创建一个名称为eureka-server和eureka-server-another的Spring Boot项目,这里将Group命名为com.itheima,将Artifact 命名为eureka-server,在pom.xml文件中添加Eureka Server依赖。
(2)添加Eureka的相关配置
在全局配置文件application.yml中添加Eureka的相关配置信息,如图3所示。
图3 全局配置文件application.yml中添加Eureka的相关配置信息
(3)在项目启动类添加@EnableEurekaServer注解
在项目启动类EurekaServerApplication.上添加@EnableEurekaServer注解开启Eureka Server功能。
(4)启动服务
测试服务搭建成功,如图4所示。
图4 测试服务搭建成功
2. 搭建eureka-hystrix-client
(1)创建项目,引入依赖
使用Spring Initializr方式创 建一个名称为eureka-hystrix-client的Spring Boot项目,这里将Group命名为com. itheima,将Artifact命名为eureka-hystrix-client,并添加Eureka Client、 Web、Feign、 Ribbon、 Hystrix依赖, Hystrix依赖如图5所示。
图5 Hystrix依赖
(2)开启熔断功能
在eureka- hystrix-client的启动类EurekaHystrixClientApplicat ion中添加@EnableHystrix注解启动熔断功能,如图6所示。
图6 添加@EnableHystrix注解启动熔断功能
(3)创建config包,在config包下创建HystrixConfig类
如图7所示。
图7 创建HystrixConfig类
(4)创建controller包
服务提供者eureka-provider中创建controller包,创建controller包,并在controller包下创建HystrixController类,在HystrixController类中创建一个hi ()方法。创建HystrixController类如图8所示。
图8创建HystrixController类
(5)新建service包,在service包下新建LocalItemService类
被@HystrixCommand注解修饰的hi()方法就启动了Hystrix熔断器的功能fallbackMethod属性定义的是处理回退( fallback)逻辑的方法。如果必须在fallback逻辑方法中远程调度其他服务,最好在远程调度其他服务时,也加上,熔断器。
图9 新建LocalItemService类
(6)启动服务
测试服务搭建成功,如图6所示。
图6 测试服务搭建成功
4. 创建hystrix-provider
(1)创建项目,引入依赖
使用Spring Initializr方式创建一个 名称为hystrix-provider的Spring Boot项目,这里将Group命名为com. itheima,将Artifact命名为hystrix- provider,并添加Eureka Client、Test、Web依赖。
(2)新建controller包,在controller包下的创建HystrixController类
新建controller包,在controller包下的创建HystrixController类,如图7所示。
图7 创建HystrixController类
(3)启动测试项目
依次启动项目server, provider, consumer, hystrix。启动成功后,使用浏览器访问http://localhost:7000和http://loaclhost:8764/hi?id=12,如图8、9所示。
图8 使用浏览器访问ttp://loaclhost:7000
图9 使用浏览器访问http://loaclhost:8764/hi?id=12
5.测试
依次启动项目server, provider, consumer, hystrix。启动成功后,使用浏览器访问http://localhost:7000和http://loaclhost:8764/hi?id=12,如图8、9所示。
图8 使用浏览器访问ttp://loaclhost:7000
图9 使用浏览器访问http://loaclhost:8764/hi?id=12