1.Feign是一個聲明式WebService客戶端。使用Feign能讓編寫Web Service客戶端更加簡單。使用方法是定義一個服務接口然後在上面添加註解。在實際開發中,由於服務依賴的調用不可能一處使用,往往一個接口會被多處調用,所以通常都會針對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。
2.用我們以前的cloudalibaba-consumer-nacos-order83工程演示作爲客戶端
3.pom文件引入openfeign
<!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
4.主啓動類:
@SpringBootApplication //@EnableDiscoveryClient @EnableFeignClients //開啓Feign public class OrderApplication83 { public static void main(String[] args) { SpringApplication.run(OrderApplication83.class,args); } }
5.編寫對外暴漏借口共調用
6.用我們之前9001和9002爲服務提供者,分別啓動這三個服務,並訪問地址:http://127.0.0.1:83/consumer/payment/nacos/1
再次刷新界面
結果證明Openfeign內部支持負載調用。
Openfeign超時控制
1.在端口9001服務中設置超時
2.在83端口服務中進行調用上面添加的接口,並訪問:http://127.0.0.1:83/consumer/payment/feign/timeout
因爲feign默認客戶端只等待一秒,但服務端處理需要超過一秒,所以就會出現上面的這個錯誤。
解決辦法:
在yml文件添加如下配置:
#設置feign 客戶端超時時間(openFeign默認支持ribbon) ribbon: #指的是建立連接所用的時間,適用於網絡狀況正常的情況下,兩端連接所用的時間 ReadTimeout: 5000 #指的是建立連接後從服務器讀取到可用資源所用的時間 ConnectTimeout: 5000
Openfeign日誌增強
在yml配置文件添加如下配置:
logging: level: #feign日誌以什麼級別監控哪個接口 com.yxw.springcloud.service.PaymentFeignService: debug
在配置日誌bean
@Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
啓動服務訪問接口看控制檯打印如下信息: