烟台网站建设推荐企汇互联见效付款,58同城网站模板,建设网站的工具是什么,企业邮箱怎么查找OpenFeign超时控制
前面简单介绍了Feign和OpenFeign的关系#xff0c;言归正传#xff0c;接下来我们看看OpenFeign如何设置调用超时#xff0c;openFeign其实是有默认的超时时间的#xff0c;默认分别是连接超时时间10秒、读超时时间60秒#xff0c;源码在feign.Request…OpenFeign超时控制
前面简单介绍了Feign和OpenFeign的关系言归正传接下来我们看看OpenFeign如何设置调用超时openFeign其实是有默认的超时时间的默认分别是连接超时时间10秒、读超时时间60秒源码在feign.Request.Options#Options()这个方法中。
Feign的原理
虽然有了接口但是仅仅有接口是不够的因为接口又不能创建对象我们得需要对象。
Feign为了方便我们为接口创建对象提供的Feign.Builder这个内部类
OpenFeign 超时场景
默认Feign 客户端只等待1秒钟但是服务端处理需要超过1秒钟导致Feign 客户端不想等待了直接返回报错
为了避免这样的情况有时候我们需要设置Feign客户端的超时控制
一、服务提供方8001写暂停程序模拟调用超时
在cloud-provider-payment8001 模拟调用超时 //模拟openfegin调用超时GetMapping(value /payment/feign/timeout)public String paymentFeignTimeout() {// 业务逻辑处理正确但是需要耗费3秒钟try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}return serverPort;}二、服务消费方80添加方法 Component
FeignClient(value CLOUD-PAYMENT-SERVICE)
public interface PaymentFeignService {GetMapping(value /payment/feign/timeout)public String paymentFeignTimeout();}三、服务消费方80添加超时方法 RestController
Slf4j
public class OrderFeignController {Resourceprivate PaymentFeignService paymentFeignService;GetMapping(value /consumer/payment/feign/timeout)public String paymentFeignTimeout() {// OpenFeign客户端一般默认等待1秒钟return paymentFeignService.paymentFeignTimeout();}
}
四、测试
OpenFeign 只等待1秒超过后报错 五、在 yml 配置超时控制
openFeign 内与 ribbon 整合了支持负载均衡它的超时控制也由最底层的 ribbon 进行控制yml 添加配置
#设置feign 客户端超时时间openFeign默认支持ribbon
ribbon:
#指的是建立连接所用的时间适用于网络状况正常的情况下两端连接所用的时间ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间ConnectTimeout: 5000
重启80后 测试
数据在3秒后返回没有报错。
OpenFeign 默认是1秒钟部分业务时间长了可以通过这个方法进行设置