您好,登錄后才能下訂單哦!
小編給大家分享一下如何解決springboot2.x引入feign踩的坑,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
最近公司項(xiàng)目需求,需要調(diào)用第三方服務(wù)的接口,所以選用了feign來實(shí)現(xiàn)(這里只說springboot2.x的pom引用,沒有怎么使用,網(wǎng)上一大頓)。
feign是聲明式的web service客戶端,它讓微服務(wù)之間的調(diào)用變得更簡單了,類似controller調(diào)用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign時提供負(fù)載均衡的http客戶端。
這里不展示hystrix熔斷的配置和實(shí)現(xiàn)
3.1 在pom.xml中加入依賴
<!-- feign依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.2.2.RELEASE</version> </dependency> <!-- hystrix 斷路器依賴 用于處理請求第三方接口超時 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.2.3.RELEASE</version> </dependency>
3.2 在啟動類上添加注解@EnableFeignClients
@EnableCaching @EnableAutoConfiguration @SpringBootApplication @EnableConfigurationProperties @ServletComponentScan//配置druid必須加的注解,如果不加,訪問頁面打不開,filter和servlet、listener之類的需要單獨(dú)進(jìn)行注冊才能使用,spring boot里面提供了該注解起到注冊作用 @EnableTransactionManagement @EnableFeignClients @EnableHystrix @EnableCircuitBreaker @EnableHystrixDashboard public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
3.3 啟動springboot的啟動類
這里不展示hystrix熔斷的配置和實(shí)現(xiàn)
在另外項(xiàng)目中引用的時候用的是spring2.x,所以就出現(xiàn)問題了,引入feign失敗。網(wǎng)上說springboot2.x需要如下引入:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
但是我使用openfeign在啟動的時候報(bào)錯:
所以我將pom.xml的依賴改成了這樣(<parent>一定要注釋掉):
<!-- 此處一定要注釋掉parent繼承父級的依賴 --> <!--<parent>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-parent</artifactId>--> <!--<version>2.1.2.RELEASE</version>--> <!--</parent>--> <dependencies> <!-- ...其他的依賴省略了 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.2.3.RELEASE</version> </dependency> </dependencies> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-openfeign</artifactId> <version>2.0.0.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
啟動類注解和springboot1.x中的一樣,啟動工程,就可以了。
兩個東家都使用SpringCloud,巴拉巴拉用上了Spring全家桶,從eureka到ribbon,從ribbon到feign,從feign到hystrix,然后在使用feign的時候發(fā)現(xiàn)使用方式不同,仔細(xì)一看這種調(diào)用方式,唉,麻煩,我怎么要自己定義DTO,自己定義Fallback, 自己定義方法呢?用上之后,其實(shí)發(fā)現(xiàn)各有各的好處,今天就來一一記錄一下。
我們在開發(fā)服務(wù)的時候,會把接口和實(shí)現(xiàn)分開, 即有一個API模塊和一個Service模塊,消費(fèi)者依賴API的jar包,直接注入API中的Service,則可以直接通過Feign調(diào)用到對應(yīng)的服務(wù),對應(yīng)的項(xiàng)目結(jié)構(gòu)如下:
我們在接口API中定義好方法,并加上Feign注解等(MICRO-PROVIDER2是服務(wù)名,注冊到Eureka Server上的名稱。 使用Feign還可以自己實(shí)現(xiàn)fallback,設(shè)置超時默認(rèn)放回值。這里做測試,不寫過多代碼)。
具體的實(shí)現(xiàn)如下圖所示。
接下來就是我們?nèi)绾卧赾onsumer中去消費(fèi)這個服務(wù)了,我們會在service服務(wù)中,依賴api的jar包,實(shí)現(xiàn)Provider2Service即可。
具體的實(shí)現(xiàn)如下圖
代碼中的實(shí)現(xiàn)邏輯:
這中方式介紹起來比較簡單。直接在消費(fèi)者中定義新的service接口,通過Feign注解,定義方法,調(diào)用的url和被調(diào)用服務(wù)的url相同,實(shí)現(xiàn)邏輯如下。
方式2:
方式1:
可以看到,兩種方式都是可以消費(fèi)到服務(wù)(本質(zhì)是一樣)。但是兩種方式各有好處和壞處,我們要來比較下,看看究竟哪一種才是我們需要的呢?
通過兩種方式的對比,我們可以看到的優(yōu)優(yōu)劣勢主要有:
方式一:
優(yōu)點(diǎn):
1:服務(wù)消費(fèi)者不用自己寫接口。
2:可提供好Dto,Vo等直接給服務(wù)消費(fèi)者。
缺點(diǎn):
1:service需要依賴jar包,如果依賴服務(wù)過多,jar也會過多。
2:給消費(fèi)者暴露了過多的接口。部分與消費(fèi)者無關(guān)的接口也暴露給對方。
方式二:
優(yōu)點(diǎn):
1:無需依賴過多jar包。
2:消費(fèi)者不要要過多接受消費(fèi)者提供的方法。
缺點(diǎn):
1:需要消費(fèi)者自己實(shí)現(xiàn)接口。
2:嚴(yán)重依賴文檔。在實(shí)現(xiàn)接口時,對于所有信息都要有文檔定義。如:請求方式,請求參數(shù),返回值等。
3:自己完成Dto,Vo的編寫?! ?/p>
以上是“如何解決springboot2.x引入feign踩的坑”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。