feign整合hystrix

1、开启配置

feign 默认是支持hystrix的,它没有默认打开。需要在配置文件中配置打开它,在配置文件加以下代码:

feign:
  hystrix:
    enabled: true 
    #开启feign当中的hystrix

如果是ribbon需要添加

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

feign就自带了,不需要麻烦了

2、超时设置

default:是默认的全局的超时时间
前面我们asset微服务里面调用user微服务,参考微服务feign调用,写了一个接口,这个可以为dms-user单独配置一个超时时间

feign:
  hystrix:
    #开启feign当中的hystrix
    enabled: true
  client:
    config:
      default:
        #不设置connectTimeout会导致readTimeout设置不生效
        #超时时间默认为1s
        #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
        connectTimeout: 3000
        # 指建立连接后从服务端读取到可用资源所用的时间
        readTimeout: 6000
      dms-user:
        connectTimeout: 3000
        readTimeout: 6000

超时时间如何配置,我个人认为

  • 不要配置太大,一般是压测90%的3倍就足够了,有人设置个60s,200s,拖累自己,不如早早释放掉
  • 要将慢操作的接口和正常接口分开,比如ocr,上传,第三方接口调用,这些接口要单独组建微服务

3、降级配置

在原来的FeignClient接口里面添加一个fallback,这个方法是实现本接口即可

package cn.dms.service.feignClient;

import cn.dms.service.hystric.UserServiceHystric;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(value = "dms-user",fallback = UserServiceHystric.class)
public interface UserService {

    @RequestMapping(value = "/user/private/findUser",method = RequestMethod.GET)
    String findUser(@RequestParam(value = "name") String name);
}

package cn.dms.service.hystric;

import cn.dms.service.feignClient.UserService;
import org.springframework.stereotype.Component;

@Component
public class UserServiceHystric implements UserService {
    @Override
    public String findUser(String name) {
        return "对不起:"+name;
    }
}

我们尝试把user的2个服务都干掉,看看他返回什么?
原本起了2个user服务,分别端口为:28082,28083
杀掉28082,之后,范围,得到结果是

对不起
28083
对不起
28083
。。。。
28083
28083

在短时间内,还是给28082分配了请求,时间长了一点,就全去28083了
看起来我的停机比较暴力,直接kill -9 不太优雅,需要学习优雅停机的方法

再把28083也杀掉

对不起
对不起
对不起

这就直接降级了

4、限流

限流的目的是为了保护系统不被大量请求冲垮,通过限制请求的速度来保护系统。
在电商的秒杀活动中,限流是必不可少的一个环节。
限制高并发,请求进行排队,一秒处理N个请求,有序的进行。

Hystrix的资源隔离策略有信号量(SEMAPHORE) 和线程池(THREAD)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值