目錄
1 概念導入
2 添加依賴
3 在啟動類上添加注解
4 編寫對應的接口
5 注入并調用
6 日志
7 超時控制
8 超時重試
9 攔截器
10 Fallback兜底
1 概念導入
Spring Cloud OpenFeign Features :: Spring Cloud Openfeign
2 添加依賴
<!-- 遠程調用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
3 在啟動類上添加注解
@EnableFeignClients
4 編寫對應的接口
package com.ax.order.feign;import com.ax.product.bean.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient(name = "service-product")
public interface ProductFeignClient {/*** 測試FeignClient** @param id*///mvc注解兩套使用邏輯//標注在Controller上,為接收請求//標注在FeignClient上,為發送請求@GetMapping("/product/{id}")Product getProductById(@PathVariable("id") Long id);//如果調用自己其他服務的api直接將其方法復制過來即可,下面這個就是從product當中復制過來的@GetMapping("/product/{id}")Product getProduct(@PathVariable("id") Long id);
}
5 注入并調用
@Autowiredprivate ProductFeignClient productFeignClient;@Overridepublic Order createOrder(Long productId, Long userId) {// Product product = getProductFromRemote3(productId);Product product = productFeignClient.getProductById(productId);Order order = new Order();order.setId(1L);// 遠程調用計算商品數額order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));order.setUserId(userId);order.setNickName("張三");order.setAddress("青島");// 遠程調用獲取商品信息order.setProductList(Arrays.asList(product));return order;}
6 日志
配置文件:
logging:level:com.ax.order.feign: debug
添加到容器中進行管理:
@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;}
輸出樣式:
7 超時控制
超時:
相關配置:
spring:cloud:openfeign:client:config:default:logger-level: fullconnect-timeout: 1000read-timeout: 2000service-product:logger-level: fullconnect-timeout: 3000read-timeout: 5000