服务调用之OpenFeign客户端工具使用
一、什么是OpenFeign?
要理解OpenFeign,先理解Feign。Feign是一個聲明式的WebService客戶端,她的目標是讓編寫JavaHttp客戶端更加容易。Spring Cloud對Feign進行了封裝,使其支持了Spring MNC標準注解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支持負載均衡。之前的微服務常規調用是通過Ribbon+RestTemplate,在實際開發中,往往一個接口會被多處調用,所以我們需要把微服務調用模塊進行封裝,形成調用客戶端,Feign在此基礎上進行了封裝,它幫助我們完成對服務提供方的接口綁定,減化使用springcloudRibbon時自行封裝調用客戶端的開發量,我們只需要創建一個接口,通過在接口上添加注解來完成功能實現(類似Dao接口上使用@Mapper一樣)。
Feign本身集成了Ribbon,實現了客戶端的負載均衡,而OpenFeign是SpringCloud在Feign的基礎上支持了SpringMVC注解,OpenFeign已經全面替代了Feign。OpenFeign的@FeignClient注解可以解析@RequestMapping注解的接口,動態代理產生實現類,在實現類中做負載均衡并調用微服務。由于OpenFeign的作用是服務調用,因此它使用在服務消費者中,而不是服務提供者中。
二、OpenFeign服務調用
1、使用OpenFeign首先需要引入jar包,引入方式如下
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、在主啟動類中增加@EnableFeignClients注解
3、書寫業務邏輯接口,在接口上增加@FeignClient注解,例如:
@Component
@Feignclient(value = "CLOUD-PAYMENT-SERVICE") /* value的值為要調用的微服務模塊的名稱,注意這里不要加http:// */
public interface PaymentFeignservice
{
GetMapping(value = "/payment/get/id}") /* value的值為服務模塊具體的控制器方法 */
public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id);
}
注意:通常一個微服務就對應一個接口類,接口類中的方法對應微服務對外提供的方法。上面的代碼表示調用CLOUD-PAYMENT-SERVICE 服務的/payment/get/id方法。
4、控制層調用以上封裝的接口,完成業務邏輯處理
@Component
public class orderFeigncontroller
{
@Resource
private PaymentFeignservice paymentFeignservice;
@GetMapping(value = "/consumer/payment/get/{fid}")
public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id)
{
return paymentFeignservice.getPaymentById(id);
}
}
三、OpenFeign超時控制
服務調用一定會產生超時的情況,OpenFeign默認等待調用服務接口的超時時間是1秒,超過1秒后就會自己拋出超時錯誤。有些情況下我們根據需求需要調整超時等待時間,可以在yml配置文件中開啟配置,OpenFeign的超時時間設置是由集成的Ribbon來控制的,代碼如下
#設置feign客廣端超時時間(openFeign默認支持ribbon) ribbon: #指的是建立連接所用的時間,適用于網絡狀況正常的情況下,兩端連接所用的時間 ReadTimeout: 5000 #指的是建立連接后從服務器讀取到可用資源所用的時問 connectTimeout: 5000
四、OpenFeign日志增強管理功能
Feign提供了日志打印功能,我們可以通過配置來調整日志級別,從而了解服務調用中http請求的細節,它提供了對Feign接口的調用情況進行監控和輸出的功能。
1、日志級別說明:
NONE-->默認,不顯示任何日志
BASIC-->僅記錄請求方法、URL、響應狀態碼、執行時間
HEADERS-->BASIC+請求頭信息+響應頭信息
FULL-->HEADERS+請求和響應的正文及元數據
2、配置日志打印功能:新建配置文件夾config,添加配置文件類FeignConfig,導入feign.Logger,寫入如下代碼
@Configuration
public class Feignconfig
{
@Bean
Logger.Level feignLoggerLevel()
{
return Logger.Leve1.FULL; /* 表示開啟詳細日志 */
}
}
3、yml配置文件中,配置日志以什么級別來監控哪個接口(這里的級別不是1中的級別)。如下表示以dubug級別來監控PaymentFeignservice接口
logging:
level:
# feign日志以什么級別監控哪個接口
com.atguigu.springcloud.service.PaymentFeignservice: debug
總結
以上是生活随笔為你收集整理的服务调用之OpenFeign客户端工具使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL80数据库报错1045解决方法
- 下一篇: 实验吧CTF题库-WEB题(部分)