SpringCloud学习笔记-Hystrix熔断器

      摘自官网http://springcloud.cc的定义:“熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

      在微服务框架内一个接口可能就是一个微服务, 各个服务之间相互依赖, 假设某个微服务运行缓慢甚至宕掉了, 会阻塞调用者线程,出现类似Android里常见的ANR错误; 即调用者进程无法释放资源,导致进程占用内存越来越大直到调用者进程挂掉。 

      熔断器的作用就是即时发现运行异常的服务, 告知调用者不再调用该服务接口, 从而避免调用者服务资源消耗殆尽。  原理如官网插图:

SpringCloud学习笔记-Hystrix熔断器_第1张图片

         被调用者服务运行异常时, 调用者服务会执行回调函数。

      SpringCloud框架内微服务间交互使用Rest或Feign, 下面分别介绍集成方法。

1、 RestTemplate + Hystrix:

       在工程pom.xml文件里添加spring-cloud-starter-hytrix依赖。


    org.springframework.cloud
    spring-cloud-starter-hystrix

        在程序入口类添加注解@EnableHytrix, 表示加载熔断器功能。

@EnableEurekaClient
@SpringBootApplication
@EnableHystrix
public class SpringCloudConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudConsumerApplication.class, args);
	}

	@LoadBalanced
	@Bean
    RestTemplate restTemplate() {
		return new RestTemplate();
	}
}
        改造接口服务类

SpringCloud学习笔记-Hystrix熔断器_第2张图片


        运行当前工程, 并在浏览器内输入http://localhost:11000/consumer?param="hytrix" ,   浏览器显示:

你调用了hello-service1的API,结果是sorry,"hytrix",service-hello1 not responde
        因为没启动呢service-hello1服务, 所以执行了回调函数, 从而避免阻塞调用者线程。


2、Feign + Hystrix

      OpenFeign是自带断路器的, 不用在pom.xml和入口类添加新增引用, 但hytrix默认是关闭的, 需要设置feign.hystrix.enabled=true。打开SrpingCloudFeignDemo工程, 修改application.yml。

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:10001/eureka/
server:
  port: 12000
spring:
  application:
    name: service-feign-consumer
feign:
  hystrix:
    enabled: true
SpringCloud学习笔记-Hystrix熔断器_第3张图片
       修改外部服务接口类, 在注解@FeignClient里添加回调类。

SpringCloud学习笔记-Hystrix熔断器_第4张图片

       实现接口类ServiceHello1,  注意ServiceHello1Impl函数参数跟接口类的区别!!!

       启动当前工程, 这是还没运行service-hello1服务。

在浏览器输入http://localhost:12000/hello?param="this is feigndemo“后, 浏览器显示:

sorry, "this is feigndemo" service-hello1 not responde



参考代码: http://download.csdn.net/download/brycegao321/10138936







你可能感兴趣的:(后台)