spring-cloud学习笔记基于spring-boot2.0.3--Hystrix集成(一)Feign Hystrix实现 - Go语言中文社区

spring-cloud学习笔记基于spring-boot2.0.3--Hystrix集成(一)Feign Hystrix实现


分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,这种现象被称为服务雪崩效应。为了应对服务雪崩,一种常见的做法是手动服务降级。而 Hystrix 的出现,给我们提供了另一种选择。

针对造成服务雪崩的不同原因,可以使用不同的应对策略:

  1. 流量控制
  2. 改进缓存模式
  3. 服务自动扩容
  4. 服务调用者降级服务

流量控制 的具体措施包括:

  • 网关限流
  • 用户交互限流
  • 关闭重试

因为 Nginx 的高性能,目前一线互联网公司大量采用 Nginx+Lua 的网关进行流量控制,由此而来的 OpenResty 也越来越热门。

采用API的网关,进行流量控制。

用户交互限流的具体措施有:

1. 采用加载动画,提高用户的忍耐等待时间。

2. 提交按钮添加强制等待时间机制。

改进缓存模式 的措施包括:

  • 缓存预加载
  • 同步改为异步刷新

服务自动扩容 的措施主要有:

  • AWS 的 auto scaling
  • 阿里云的弹性伸缩

服务调用者降级服务 的措施包括:

  • 资源隔离
  • 对依赖服务进行分类
  • 不可用服务的调用快速失败

资源隔离主要是对调用服务的线程池进行隔离。

我们根据具体业务,将依赖服务分为: 强依赖和若依赖。强依赖服务不可用会导致当前业务中止,而弱依赖服务的不可用不会导致当前业务的中止。

不可用服务的调用快速失败一般通过 超时机制熔断器 和熔断后的 降级方法 来实现。

使用 Hystrix 预防服务雪崩

服务降级(Fallback)

对于查询操作,我们可以实现一个 fallback 方法,当请求后端服务出现异常的时候,可以使用 fallback 方法返回的值。fallback 方法的返回值一般是设置的默认值或者来自缓存。

上篇文章的2个应用上进行修改vts_sc_provider和vts_sc_cosumer

消费端(vts_sc_consumer)变更:

修改POM文件,增加jar的引入

	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
	</dependency>
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

新增TestHystrix类

@Component
public class TestHystrix implements TestService{

	@Override
	public String test(@RequestParam(value = "name") String name) {
		// TODO Auto-generated method stub
		return "出错了,我就回调咯";
	}

}

注意:该类必须实现对应的Service的接口,并且需要使用@Component注解托管给spring。

修改TestService类

@FeignClient(name = "eureka-producer",fallback=TestHystrix.class)
public interface TestService {

	@GetMapping("/test/")
    String test(@RequestParam(value = "name") String name);
}

变更@FeignClient增加属性fallack属性,指定Hystrix容错处理类。

修改Application类

@SpringBootApplication
@EnableFeignClients
@EnableHystrix
public class Application {
	
	public static void main(String[] args) throws Exception {
		SpringApplication.run(Application.class, args);
	}

}

增加注解@EnableHystrix

修改配置文件:

spring:
  application:
    name: eureka-consumer
eureka:
  client:
    service-url:
      defaultZone: http://eureka.zhubanxian.com/eureka/
server:
  port: 8002
feign:
  hystrix:
    enabled: true

测试:

打开注册中心查看服务是否注册成功:

依次启动:vts_sc_provider,vts_sc_consumer

访问:http://localhost:8002/test/大仙

返回:我是大仙!

说明加入hystrix后,不影响我们的正常使用。现在我们手动停止vts_sc_provider项目

访问:http://localhost:8002/test/大仙

返回:出错了,我就回调咯

根据返回结果说明熔断成功

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhuwei_clark/article/details/82286042
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 11:35:36
  • 阅读 ( 776 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢