1.代碼
在cloud-payment-provider8001的PaymentController里添加
// 用於測試openFeign的超時控制 @GetMapping("/payment/timeout") public String paymentOpenFeignTimeOut() { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } return serverPort; }
單獨測試這個,等待三秒成功訪問。
在cloud-consumer-feign-order80里寫接口等:
@Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService { @GetMapping(value="/payment/get/{id}") public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id); @GetMapping("/payment/timeout") public String paymentOpenFeignTimeOut(); }
@RestController public class PaymentFeignController { @Resource private PaymentFeignService paymentFeignService; @GetMapping("/consumer/payment/get/{id}") public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) { return paymentFeignService.getPaymentById(id); } @GetMapping("/consumer/payment/timeout") public String paymentOpenFeignTimeOut() { return paymentFeignService.paymentOpenFeignTimeOut(); } }
再測試:
因為feign默認等待一秒。
openFeign默認支持Ribbon, 在yml里開啟客戶端超時控制:
ribbon: ReadTimeout: 5000 ConnectTimeout: 5000
測試超時控制ok: