irpas技术客

OpenFeign超时控制_DuBobo_openfeign超时时间设置

大大的周 3762

?在上一篇的OpenFeign服务调用中,虽然可以使用OpenFeign来实现服务之间的调用,但是一旦调用提供服务方的时候超时就会报错;所以这里就需要了解到OpenFeign的超时控制。

在提供服务端暴露一个接口,设置睡眠3秒钟,方便测试

@Value("${server.port}") private String serverPort; // 返回端口号 @GetMapping(value = "/feign/timeout") public String paymenyFeignTimeout() { try { TimeUnit.SECONDS.sleep(3); }catch (Exception e){ e.printStackTrace(); } return serverPort; }

然后在调用方的接口新增接口 相对应

@Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService { @GetMapping(value = "/better/payment/feign/timeout") String paymentFeignTimeout(); }

controller实现

@GetMapping(value = "/consumer/payment/feign/timeout") public String paymentFeignTimeout() { String result = paymentFeignService.paymentFeignTimeout(); return result; }

分别启动eureka、提供服务端、调用端,网页中输入localhost/consumer/payment/feign/timeout测试会发现3秒后会报错

因为OpenFeign默认的超时为1秒,我们设置了睡眠时间为3秒,所以会报错。

但是我们可以根据业务的需求,手动设置超时控制的时间。

openFeign中整合了ribbon,它的超时控制是由ribbon 进行控制的

?在yml中添加配置项,设置为5秒大于之前设置的睡眠时间(3秒)

#设置feign 客户端超时时间(openFeign默认支持ribbon) ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000

注意:如果没有生效的话就去看一下引入的包是否冲突了,包名后带(omitted for duplicate)的字样就说明包有冲突,根据自己的情况调整版本。

yml配置好后,重启一下调用端,再进行测试

?

调用成功,通了~?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #openfeign超时时间设置