定制app开发在上一篇的OpenFeign定制app开发服务调用中,定制app开发虽然可以使用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、提供服务端、调用端,网页中输入测试会发现3秒后会报错
因为OpenFeign默认的超时为1秒,我们设置了睡眠时间为3秒,所以会报错。
但是我们可以根据业务的需求,手动设置超时控制的时间。
openFeign中整合了ribbon,它的超时控制是由ribbon 进行控制的
在yml中添加配置项,设置为5秒大于之前设置的睡眠时间(3秒)
- #设置feign 客户端超时时间(openFeign默认支持ribbon)
- ribbon:
- #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
- ReadTimeout: 5000
- #指的是建立连接后从服务器读取到可用资源所用的时间
- ConnectTimeout: 5000
注意:如果没有生效的话就去看一下引入的包是否冲突了,包名后带(omitted for duplicate)的字样就说明包有冲突,根据自己的情况调整版本。
yml配置好后,重启一下调用端,再进行测试
调用成功,通了~