亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決springboot2.x引入feign踩的坑

發布時間:2022-01-19 10:28:12 來源:億速云 閱讀:301 作者:小新 欄目:開發技術

小編給大家分享一下如何解決springboot2.x引入feign踩的坑,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

springboot2.x引入feign踩的坑

一、需求

最近公司項目需求,需要調用第三方服務的接口,所以選用了feign來實現(這里只說springboot2.x的pom引用,沒有怎么使用,網上一大頓)。

二、什么是feign

feign是聲明式的web service客戶端,它讓微服務之間的調用變得更簡單了,類似controller調用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign時提供負載均衡的http客戶端。

三、springboot1.x中feign的使用

這里不展示hystrix熔斷的配置和實現

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之類的需要單獨進行注冊才能使用,spring boot里面提供了該注解起到注冊作用
@EnableTransactionManagement
@EnableFeignClients
@EnableHystrix
@EnableCircuitBreaker
@EnableHystrixDashboard
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

3.3 啟動springboot的啟動類

四、springboot2.x中feign的使用

這里不展示hystrix熔斷的配置和實現

在另外項目中引用的時候用的是spring2.x,所以就出現問題了,引入feign失敗。網上說springboot2.x需要如下引入:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

但是我使用openfeign在啟動的時候報錯:

如何解決springboot2.x引入feign踩的坑

所以我將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中的一樣,啟動工程,就可以了。

feign調用方式比較

一、事發原因

兩個東家都使用SpringCloud,巴拉巴拉用上了Spring全家桶,從eureka到ribbon,從ribbon到feign,從feign到hystrix,然后在使用feign的時候發現使用方式不同,仔細一看這種調用方式,唉,麻煩,我怎么要自己定義DTO,自己定義Fallback, 自己定義方法呢?用上之后,其實發現各有各的好處,今天就來一一記錄一下。

二、方式1介紹

我們在開發服務的時候,會把接口和實現分開, 即有一個API模塊和一個Service模塊,消費者依賴API的jar包,直接注入API中的Service,則可以直接通過Feign調用到對應的服務,對應的項目結構如下:

如何解決springboot2.x引入feign踩的坑

我們在接口API中定義好方法,并加上Feign注解等(MICRO-PROVIDER2是服務名,注冊到Eureka Server上的名稱。 使用Feign還可以自己實現fallback,設置超時默認放回值。這里做測試,不寫過多代碼)。

具體的實現如下圖所示。

如何解決springboot2.x引入feign踩的坑

接下來就是我們如何在consumer中去消費這個服務了,我們會在service服務中,依賴api的jar包,實現Provider2Service即可。

具體的實現如下圖

如何解決springboot2.x引入feign踩的坑

代碼中的實現邏輯:

如何解決springboot2.x引入feign踩的坑

三、方式2介紹

這中方式介紹起來比較簡單。直接在消費者中定義新的service接口,通過Feign注解,定義方法,調用的url和被調用服務的url相同,實現邏輯如下。

如何解決springboot2.x引入feign踩的坑

四、調用結果測試

方式2:

如何解決springboot2.x引入feign踩的坑

方式1:

如何解決springboot2.x引入feign踩的坑

可以看到,兩種方式都是可以消費到服務(本質是一樣)。但是兩種方式各有好處和壞處,我們要來比較下,看看究竟哪一種才是我們需要的呢?

五、兩種方式對比  

通過兩種方式的對比,我們可以看到的優優劣勢主要有:

方式一:

優點:

1:服務消費者不用自己寫接口。

2:可提供好Dto,Vo等直接給服務消費者。

缺點:

1:service需要依賴jar包,如果依賴服務過多,jar也會過多。

2:給消費者暴露了過多的接口。部分與消費者無關的接口也暴露給對方。

方式二:

優點:

1:無需依賴過多jar包。

2:消費者不要要過多接受消費者提供的方法。

缺點:

1:需要消費者自己實現接口。

2:嚴重依賴文檔。在實現接口時,對于所有信息都要有文檔定義。如:請求方式,請求參數,返回值等。

3:自己完成Dto,Vo的編寫。  

以上是“如何解決springboot2.x引入feign踩的坑”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

虎林市| 梅州市| 永丰县| 德江县| 闽清县| 黄骅市| 于田县| 宁明县| 合肥市| 吴桥县| 平南县| 恭城| 阳新县| 宁晋县| 株洲市| 厦门市| 南丹县| 日喀则市| 苏尼特右旗| 上饶县| 犍为县| 新晃| 杭州市| 顺昌县| 衡阳县| 广丰县| 长葛市| 绥滨县| 新巴尔虎左旗| 濉溪县| 九龙城区| 财经| 若羌县| 深圳市| 承德县| 迁西县| 思南县| 延津县| 察隅县| 灵丘县| 湖北省|