Hystrix负载均衡--SpringCloud学习笔记

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,能保证在一个依赖出问题的情况下不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

  • 服务降级fallback
    服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好提示
    • 程序运行异常
    • 超时
    • 服务熔断触发服务降级
    • 线程池、信号量打满也会导致服务降级
  • 服务熔断break
    达到最大服务访问后,直接拒绝访问,然后调用服务降级的方法并返回友好提示
  • 服务限流flowlimit
    秒杀高并发等操作,严禁一窝蜂的过来拥挤

服务降级

一般是放在客户端,这里先说服务端8001端口

首先是添加pom依赖,引入hystrix

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

主启动类加上注解

@EnableHystrix

或者

@EnableCircuitBreaker

对于要降级的service实现加上注解

@HystrixCommand(fallbackMethod = "paymentInfoTimeoutHandler",commandProperties = {
   
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })

其中paymentInfoTimeoutHandler是服务降级后调用的方法名,方法需要自己写(注意,这个方法的返回类型、参数类型都要和要保护的方法保持一致),一般就是返回一个错误页面,value是最大的等待时间,由name知单位是ms,例子中是超过3s即跳转paymentInfoTimeoutHandler方法。

下面说80端口的使用。

首先添加yml配置

#开启Hystrix支持
feign:
  hystrix:
    enabled: true

主启动类加注解

@EnableHystrix

然后可以直接在controller层的方法中加类似注解

@HystrixCommand(fallbackMethod = "paymentInfoTimeoutHandler",commandProperties = {
   
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })

即可实现客户访问端自身的保护。

或者直接加一个全局异常方法,写在controller中,然后controller添加全局注解,

@DefaultProperties(defaultFallback = "paymentGlobalFallback")

其中paymentGlobalFallback为自定义的方法。需要时,在方法头添加注解@HystrixCommand,即可实现保护。

再或者,在客户端的service上使用注解

@FeignClient(value = "cloud-payment-hystrix-service",fallback = PaymentFallback.class)

然后定义PaymentFallback类,在类中重写,当service中的方法出现超时、程序异常、宕机则会服务降级实现PaymentFallback里面重写的方法。

注意,这里一定要在yml中配置好

#开启Hystrix支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值