为什么要禁用retryer?其实主要是为了Debug,禁用feign retryer有两面性,如果接口做好幂等性,retry不影响,但是总有一些意外发生,比如:有一个实例发生了故障而该情况还没有被服务治理机制及时的发现和摘除,这时候客户端访问该节点的时候自然会失败。所以,为了构建更为健壮的应用系统,我们希望当请求失败的时候能够有一定策略的重试机制,而不是直接返回失败。这个时候就需要Retryer;像一些更新德接口,如果不做好幂等性,retry可能会导致数据错乱;dev环境feign调用会频繁出现retry,影响Debug;下面让我们一起开启debug模式:

1,下载feign-core

// https://mvnrepository.com/artifact/com.netflix.feign/feign-core
runtime group: 'com.netflix.feign', name: 'feign-core', version: '8.18.0'

feign-core是runtime不是compile,build会报错;把jar包下载下来放在libs目录下,用compile的方式。

compile fileTree(dir:'libs',include:['*.jar'])

2,Retryer不去重试

@Configuration
public class RetryerConfig {
@Bean
@Primary
Retryer feignRetryer() {
return Retryer.NEVER_RETRY;
}
}

配置完retryer之后还会出现两次请求,为什么?我们没有配置ribbon相关的properties。

3,Ribbon properties

#Max number of retries
ribbon.MaxAutoRetries=0
#Max number of next servers to retry (excluding the first server)
ribbon.MaxAutoRetriesNextServer=0
#Whether all operations can be retried for this client
ribbon.OkToRetryOnAllOperations=false
#Interval to refresh the server list from the source
ribbon.ServerListRefreshInterval=2000
#Connect timeout used by Apache HttpClient
ribbon.ConnectTimeout=3000
#Read timeout used by Apache HttpClient
ribbon.ReadTimeout=5000
  • xxx-service.ribbon.ConnectTimeout:请求连接的超时时间

  • xxx-service.ribbon.ReadTimeout:请求处理的超时时间

  • xxx-service.ribbon.OkToRetryOnAllOperations:对所有操作请求都进行重试

  • xxx-service.ribbon.MaxAutoRetriesNextServer:切换实例的重试次数

  • xxx-service.ribbon.MaxAutoRetries:对当前实例的重试次数

根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),如果不行,就换一个实例进行访问,如果还是不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),如果依然不行,返回失败信息。大家要设置Connect和Read超时时间的话,不要小于默认设置的超时时间;如果同时使用Retryer和Hystrix,建议Hystrix的超时>其他组件的超时,否则将可能导致重试特性失效。

        其实最后再次强调一下,这篇只适合debug,生产上不要去禁用Retryer,但是小伙伴们一定要做好幂等性。下一篇聊一下Hystrix,欢迎吐槽!上一篇小哥哥说过要考研,现在已经决定了,有考验经验的小伙伴可以留言分享一下经验。不要玻璃心,不怂就是一个字干!自勉!

禁用feign retryer的更多相关文章

  1. Feign禁用Hystrix

    1.完全禁用Hystrix配置yml文件feign.hystrix.enabled=false 2.部分禁用Hystrix2.1.FeignNoHystrixConfigure.java——编写Fei ...

  2. Spring Cloud Feign 总结

    Spring Cloud中, 服务又该如何调用 ? 各个服务以HTTP接口形式暴露 , 各个服务底层以HTTP Client的方式进行互相访问. SpringCloud开发中,Feign是最方便,最为 ...

  3. 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用

    在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...

  4. 客户端通过Feign发起请求 服务端通过request取 json对象

    @RestController @RequestMapping(value = "test") public class TestServer { @RequestMapping( ...

  5. SpringCloud学习笔记:声明式调用Feign(4)

    1. Feign简介 Feign采用声明式API接口的风格,将Java HTTP客户端绑定到它的内部. Feign的首要目标是简化Java HTTP客户端调用过程. 2.Feign客户端示例 Feig ...

  6. Feign性能优化注意事项

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name ...

  7. 客户端负载均衡Feign之三:Feign补充

    在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...

  8. Feign 注意事项

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...

  9. Spring Cloud(十二)声名式服务调用:Feign 的使用(下)

    前言 本文是对上一篇博文的扩充,很多平时用不到的特性就开始简略一写,Spring Cloud各版本之间的差距很大的,用不到的可能下一个版本就被kill掉了.由于笔者写本文开始的时候误解了Feign的继 ...

随机推荐

  1. PHP获取时间戳和微秒数以及生成唯一ID

    microtime函数 描述:返回当前Unix时间戳和微秒数 语法:mixed microtime( [ bool $get_as_float ] ) //直接输出 echo microtime(); ...

  2. kali自定义分辨率(1920*1080)

    运行一下两行代码: xrandr --newmode -hsync +vsync xrandr --addmode Virtual1 "1920x1080_60.00"

  3. HTTP Status 404 – Not Found

    一般都是配置中的问题,这次发现扫描controller时,自己的包是com.aaa.conlller,而springmvc.xml中扫描的是com.aaa.controller,,多写了一个l

  4. c# 将object尝试转为指定对象

    主方法: /// <summary> /// 将object尝试转为指定对象 /// </summary> /// <param name="data" ...

  5. 通过HttpClient发起Get请求,获取Json数据,然后转为java数据,然后批量保存数据库;

    Json转java所需Jar包: commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.5.jar,comm ...

  6. 深入Java集合学习系列:LinkedHashMap的实现原理

    参考下面链接: http://zhangshixi.iteye.com/blog/673789

  7. 解析分享链接在微信内转发防封API接口的实现原理

    域名被微信封了怎么办?相信这是很多做微信的朋友的疑惑,本人也是做防封的,特此写一篇文章,写给域名被微信封的.被秒封的朋友来看.简单个大家讲一下防封原理和实现方式. 域名拦截因素 我们先来了解一下域名为 ...

  8. 架构(四)Git简介,安装以及相关命令SourceTree

    一 Git介绍 1.1 Git是什么? Git是一个分布式版本控制软件: 版本控制:假如开发人员开发了一个a功能,结果项目经理觉得不够需要修改,开发人员又改成了b功能,后来又改成了c功能,但是最终项目 ...

  9. [转] AppArmor

    AppArmor https://help.ubuntu.com/14.04/serverguide/apparmor.html AppArmor 是一个实施了基于名称强制存取控制的Linux安全模组 ...

  10. 卷积神经网络中的channel 和filter

    在深度学习的算法学习中,都会提到 channels 这个概念.在一般的深度学习框架的 conv2d 中,如 tensorflow .mxnet,channels 都是必填的一个参数. channels ...