zoukankan      html  css  js  c++  java
  • feign使用hystrix熔断的配置

    熔断器hystrix

    在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。
    Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。
    Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。
    总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。

    feign开启熔断功能

    feign可以用okhttp代替传统的httpclient,性能更好

    feign:
      hystrix:
        enabled: true
      httpclient:
        enabled: false
      okhttp:
        enabled: true
    
    

    ribbon这块也可以对okhttp进行配置

    ribbon.httpclient.enabled=false
    ribbon.okhttp.enabled=true
    

    hystrix熔断器可以对请求进行重试,对超时时间进行配置等。

    hystrix:
      command:
        default:
          execution:
            timeout:
              enabled: true
          isolation:
            thread:
              #目前有两个容器实例,单个请求超时5s,+重试>10s,超15s则熔断
              timeoutInMilliseconds: 15000
    
    ribbon:
      #ribbon请求连接的超时时间- 限制3秒内必须请求到服务,并不限制服务处理的返回时间
      connectTimeout: 3000
      #请求处理的超时时间 下级服务响应最大时间,超出时间消费方(路由也是消费方)返回timeout,超时时间不可大于断路器的超时时间
      readTimeout: 5000
    
    

    feign添加fallback实现默认行为

    feign上使用fallback之前,当服务端出现问题时,可以快速响应,并且不会抛出异常,就象为feign加了一层try...cache一样。

    使用方式

    开始feign.hystrix的功能

    feign:
      hystrix:
        enabled: true
      httpclient:
        enabled: false
      okhttp:
        enabled: true
    
    

    当feign的服务端出现问题时,返回值为fallback的值,你可以自己定,例如:

    @Component
    @Slf4j
    public class UserClientFallback implements UserClient {
      @Override
      public Map getUser(Long id) {
        logger.info("getUser.error");
        return null;
      }
    
      @Override
      public Map getUsers() {
        logger.info("getUsers.error.retrun.default");
        return ImmutableMap.of("name", "lind", "sex", "male");
      }
    }
    

    调用userclient失败之后,将返回默认的对象

     @GetMapping("/api/v1/test")
      public ResponseEntity<?> userGet() {
       Map users= userClient.getUsers();
        return ResponseUtils.okMessage("success");
      }
    

    结果将是默认值

    {"status":200,"message":"操作成功","data":{"name":"lind","sex":"male"},"totalRecords":0}
    
  • 相关阅读:
    分布式爬虫
    前端页面展示
    fillter根据value来匹配字段
    element ui 怎么去修改el-date-picker的时间
    element ui,input框输入时enter健进行搜索
    element ui 里面的table怎么弹出一个框让表中数据点击出现弹框
    修改数据结构记录,将同级数据改成父子集数据
    h5的复制功能的使用,Clipboard.js的使用,主要是在app里面使用
    在安卓手机下按钮会悬浮在键盘上,怎么解决vue.js
    last-child为啥不生效
  • 原文地址:https://www.cnblogs.com/lori/p/11112680.html
Copyright © 2011-2022 走看看