SpringCloud服務(wù)接口調(diào)用OpenFeign及使用詳解
OpenFeign簡介
Feign是一個(gè)聲明式的Web服務(wù)客戶端,讓編寫Web服務(wù)客戶端變得非常容易,只需創(chuàng)建一個(gè)接口并在接口上添加注解即可。
在學(xué)習(xí)Ribbon時(shí),服務(wù)間調(diào)用使用的是RestTemplate+Ribbon實(shí)現(xiàn),而Feign在此基礎(chǔ)上繼續(xù)進(jìn)行了封裝,使服務(wù)間調(diào)用變得更加方便。
而OpenFeign可以理解為Feign的升級版。
OpenFeign使用
OpenFeign應(yīng)用在消費(fèi)端,服務(wù)端不需要做任何改變
創(chuàng)建一個(gè)新的消費(fèi)端cloud-consumer-feign-order80
,首先引入相關(guān)依賴,引入OpenFeign以后,可以看到OpenFeign內(nèi)置了Ribbon,所以他底層實(shí)現(xiàn)負(fù)載均衡還是依賴于Ribbon
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>com.yellowstar.springcloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
編寫配置文件
server.port=80 eureka.client.register-with-eureka=false eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
在啟動(dòng)類上添加如下注解
@EnableFeignClients
對于OpenFeign來說,服務(wù)間的調(diào)用需要在消費(fèi)端創(chuàng)建一個(gè)接口,這個(gè)接口類似于服務(wù)端
@Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService { @GetMapping("/payment/get/{id}") CommonResult<Payment> getPayment(@PathVariable("id") int id); }
OpenFeign超時(shí)控制
默認(rèn)情況下,OpenFeign調(diào)用方法,會(huì)給該方法一秒鐘的執(zhí)行時(shí)間,如果一秒鐘之后沒有執(zhí)行完方法,則直接報(bào)錯(cuò)。而OpenFeign底層調(diào)用的Ribbon,也就是說我們需要設(shè)置Ribbon服務(wù)間調(diào)用的等待時(shí)間
#指的是建立連接所用的時(shí)間,適用于網(wǎng)絡(luò)狀況正常的情況下,兩端連接所用的時(shí)間 ribbon.ReadTimeout=5000l #指的是建立連接后從服務(wù)器讀取到可用資源所用的時(shí)間 ribbon.ConnectTimeout=5000
如果不設(shè)置,會(huì)報(bào)一下錯(cuò)誤
OpenFeign日志
OpenFeign在調(diào)用http請求時(shí),可以將請求的日志完整的打印出來,有以下幾種日志級別,默認(rèn)是無日志。
- NONE:默認(rèn)的,不顯示任何日志;
- BASIC:僅記錄請求方法、URL、響應(yīng)狀態(tài)碼及執(zhí)行時(shí)間;
- HEADERS:除了 BASIC 中定義的信息之外,還有請求和響應(yīng)的頭信息;
- FULL:除了 HEADERS 中定義的信息之外,還有請求和響應(yīng)的正文及元數(shù)據(jù)。
首先需要對Feign的日志級別進(jìn)行配置
@Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
添加配置文件
# feign日志以什么級別監(jiān)控哪個(gè)接口 logging.level.com.yellowstar.springcloud.service.PaymentFeignService=debug
接下來就可以觀察http請求的完整信息了
到此這篇關(guān)于SpringCloud服務(wù)接口調(diào)用——OpenFeign的文章就介紹到這了,更多相關(guān)SpringCloud OpenFeign服務(wù)調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java開發(fā)中的23種設(shè)計(jì)模式詳解(推薦)
本篇文章主要介紹了Java開發(fā)中的23種設(shè)計(jì)模式詳解,現(xiàn)在分享給大家,也給大家做個(gè)參考。感興趣的小伙伴們可以參考一下。 設(shè)計(jì)模式(Design Patterns)2016-11-11Java必會(huì)的Synchronized底層原理剖析
synchronized作為Java程序員最常用同步工具,很多人卻對它的用法和實(shí)現(xiàn)原理一知半解,以至于還有不少人認(rèn)為synchronized是重量級鎖,性能較差,盡量少用。但不可否認(rèn)的是synchronized依然是并發(fā)首選工具,本文就來詳細(xì)講講2022-10-10Spring中實(shí)現(xiàn)定時(shí)調(diào)度的幾種方法
本篇文章主要介紹了Spring中實(shí)現(xiàn)定時(shí)調(diào)度示例,可以在無人值守的時(shí)候系統(tǒng)可以在某一時(shí)刻執(zhí)行某些特定的功能,有興趣的可以了解一下。2017-02-02IDEA創(chuàng)建SpringBoot父子Module項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了IDEA創(chuàng)建SpringBoot父子Module項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Spring中的spring.factories文件用法(Spring如何加載第三方Bean)
這篇文章主要介紹了Spring中的spring.factories文件用法(Spring如何加載第三方Bean),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10