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