服务提供者
Openfeign远程调用服务提供者搭建
文章地址http://t.csdnimg.cn/06iz8
PaymentController【控制层】
/*** 测试超时机制** @return*/@GetMapping("/timeout")public String TimeOut() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}return "payment success";}
相关接口
测试超时机制:http://localhost:8001/payment/timeout
服务消费者
Openfeign远程调用消费者搭建
文章地址http://t.csdnimg.cn/06iz8
依赖
<!-- resilience4j -->
<dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-spring-cloud2</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
application.yml
# 超时机制
resilience4j:timelimiter:instances:delay:# 设置超时时间 2秒timeoutDuration: 2
PaymentFeignService【接口层】
/*** 支付服务-测试超时机制** @return*/@GetMapping("/payment/timeout")String paymentTimeout();
OrderController【控制层】
/*** 支付服务-测试超时降级** @return*/@GetMapping("/timeout")@TimeLimiter(name = "delay", fallbackMethod = "timeoutFallback")//超时降级注解:name:对应application.yml的超时降级配置名称;fallbackMethod:超时服务降级方法public CompletableFuture<String> paymentTimeout() {log.info("********* 进入方法 ******");//resilience4j一般用异步操作,此处使用lambda表达式CompletableFuture<String> completableFuture =CompletableFuture.supplyAsync((Supplier<String>) () -> (paymentFeignService.paymentTimeout()));log.info("********* 离开方法 ******");return completableFuture;}/*** 超时服务降级方法** @param e* @return*/public CompletableFuture<ResponseEntity> timeoutFallback(Exception e) {e.printStackTrace();return CompletableFuture.completedFuture(ResponseEntity.ok("超时啦"));}
相关接口
测试服务调用:http://localhost:8004/order/index
测试超时机制:http://localhost:8004/order/timeout