SpringCloud Hystrix

SpringCloud Hystrix(断路器)的作用主要是:熔断机制,服务降级,服务限流和解决服务雪崩效应。

1.什么是服务雪崩效应?
假如在一个A工程中的tomcat服务器中有两个服务接口地址,一个test/login,一个是test/get,另一个B项目中有一个接口需要去调用test/get,假如test/get每两秒进行响应,假如客户端通过B去调用A,B中的tomcat最大线程为30个,B中还有另外一个接口c,在同一时刻有30个请求通过B调用A的接口,第31个请求去调用c,这时调用c的请求就会在浏览器上显示转圈,一直等待。也就是说所有的请求在处理一个服务,B去调用A的接口,A接口没有及时返回,B中所有的请求就会等待,服务连接没有被释放,导致B中的其他请求没有响应。
服务雪崩产生服务堆积,导致其他服务接口无法访问
(1)某几个机器故障:一些特定的机器上出现一些的bug(如,内存中断或者死锁)。
(2)服务器负载发生变化:某些时候服务会因为用户行为造成请求无法及时处理从而导致雪崩,例如阿里的双十一活动,若没有提前增加机器预估流量则会造服务器压力会骤然增大二挂掉。
(3)人为因素:比如代码中的路径在某个时候出现bug。
1.1使用超时机制
服务降级:服务调用接口时发生错误或者超时,不让调用接口,调用本地的fallback。其实就是调用本地接口,提示用户。
1.2服务降级 服务接口发生错误,不去调用接口,调用本地方法fallback.
1.3熔断机制 解决服务高并发,一旦达到规定请求,熔断报错。
隔离机制,每个服务接口隔离开。限流机制:Ngnix,网关

2.使用断路器(SpringCloud Hystrix)
Hystrix,hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。
在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。
当我们在做RPC远程调用,解决服务雪崩效应,服务于服务之间的报错信息。
Rest请求方式接口接入断路器

@HystrixCommand(fallbackMethod = "error")
public List<String> getOrderUserAll() {
return restTemplate.getForObject("http://项目名/xxxxl", List.class);
}

public String error() {
String erro="错误"
	return erro;
}

启动类要加上@EnableHystrix(启动断路器)

Fegin使用断路器

@FeignClient(value="service-member",fallback=MemberFeignService.class)
public interface MemberFeign {
	@RequestMapping("/getMemberAll")
	public List<String> getOrderByUserList();
}
@Component
public class MemberFeignService implements MemberFeign {

	public List<String> getOrderByUserList() {
		List<String> listUser = new ArrayList<String>();
		listUser.add("not orderUser list");
		return listUser;
	}
}

配置文件新增

改造service-order-feign工程
@FeignClient(value="service-member",fallback=MemberFeignService.class)
public interface MemberFeign {
	@RequestMapping("/getMemberAll")
	public List<String> getOrderByUserList();
}
@Component
public class MemberFeignService implements MemberFeign {

	public List<String> getOrderByUserList() {
		List<String> listUser = new ArrayList<String>();
		listUser.add("not orderUser list");
		return listUser;
	}
}

配置文件新增
feign:
   hystrix:
     enabled: true
##配置中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
#### tomcat最大接线程数
server:
  port: 8765
  tomcat:
    max-threads: 50
spring:
  application:
    name: service-order-feign
feign:
   hystrix:
     enabled: true
###超时时间
hystrix:
   command: 
     default: 
       execution: 
        isolation:
         thread: 
          timeoutInMilliseconds: 4000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值