欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot2.x引入feign踩的坑及解決

 更新時(shí)間:2022年01月19日 09:06:26   作者:半路笙歌  
這篇文章主要介紹了springboot2.x引入feign踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot2.x引入feign踩的坑

一、需求

最近公司項(xiàng)目需求,需要調(diào)用第三方服務(wù)的接口,所以選用了feign來(lái)實(shí)現(xiàn)(這里只說(shuō)springboot2.x的pom引用,沒(méi)有怎么使用,網(wǎng)上一大頓)。

二、什么是feign

feign是聲明式的web service客戶端,它讓微服務(wù)之間的調(diào)用變得更簡(jiǎn)單了,類似controller調(diào)用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign時(shí)提供負(fù)載均衡的http客戶端。

三、springboot1.x中feign的使用

這里不展示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 斷路器依賴 用于處理請(qǐng)求第三方接口超時(shí) -->
<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 在啟動(dòng)類上添加注解@EnableFeignClients

@EnableCaching
@EnableAutoConfiguration
@SpringBootApplication
@EnableConfigurationProperties
@ServletComponentScan//配置druid必須加的注解,如果不加,訪問(wèn)頁(yè)面打不開(kāi),filter和servlet、listener之類的需要單獨(dú)進(jìn)行注冊(cè)才能使用,spring boot里面提供了該注解起到注冊(cè)作用
@EnableTransactionManagement
@EnableFeignClients
@EnableHystrix
@EnableCircuitBreaker
@EnableHystrixDashboard
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

3.3 啟動(dòng)springboot的啟動(dòng)類

四、springboot2.x中feign的使用

這里不展示hystrix熔斷的配置和實(shí)現(xiàn)

在另外項(xiàng)目中引用的時(shí)候用的是spring2.x,所以就出現(xiàn)問(wèn)題了,引入feign失敗。網(wǎng)上說(shuō)springboot2.x需要如下引入:

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

但是我使用openfeign在啟動(dòng)的時(shí)候報(bào)錯(cuò):

所以我將pom.xml的依賴改成了這樣(<parent>一定要注釋掉):

<!-- 此處一定要注釋掉parent繼承父級(jí)的依賴 -->
<!--<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>

啟動(dòng)類注解和springboot1.x中的一樣,啟動(dòng)工程,就可以了。

feign調(diào)用方式比較

一、事發(fā)原因

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

二、方式1介紹

我們?cè)陂_(kāi)發(fā)服務(wù)的時(shí)候,會(huì)把接口和實(shí)現(xiàn)分開(kāi), 即有一個(gè)API模塊和一個(gè)Service模塊,消費(fèi)者依賴API的jar包,直接注入API中的Service,則可以直接通過(guò)Feign調(diào)用到對(duì)應(yīng)的服務(wù),對(duì)應(yīng)的項(xiàng)目結(jié)構(gòu)如下:

我們?cè)诮涌贏PI中定義好方法,并加上Feign注解等(MICRO-PROVIDER2是服務(wù)名,注冊(cè)到Eureka Server上的名稱。 使用Feign還可以自己實(shí)現(xiàn)fallback,設(shè)置超時(shí)默認(rèn)放回值。這里做測(cè)試,不寫過(guò)多代碼)。

具體的實(shí)現(xiàn)如下圖所示。

接下來(lái)就是我們?nèi)绾卧赾onsumer中去消費(fèi)這個(gè)服務(wù)了,我們會(huì)在service服務(wù)中,依賴api的jar包,實(shí)現(xiàn)Provider2Service即可。

具體的實(shí)現(xiàn)如下圖

代碼中的實(shí)現(xiàn)邏輯:

三、方式2介紹

這中方式介紹起來(lái)比較簡(jiǎn)單。直接在消費(fèi)者中定義新的service接口,通過(guò)Feign注解,定義方法,調(diào)用的url和被調(diào)用服務(wù)的url相同,實(shí)現(xiàn)邏輯如下。

四、調(diào)用結(jié)果測(cè)試

方式2:

方式1:

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

五、兩種方式對(duì)比  

通過(guò)兩種方式的對(duì)比,我們可以看到的優(yōu)優(yōu)劣勢(shì)主要有:

方式一:

優(yōu)點(diǎn):

1:服務(wù)消費(fèi)者不用自己寫接口。

2:可提供好Dto,Vo等直接給服務(wù)消費(fèi)者。

缺點(diǎn):

1:service需要依賴jar包,如果依賴服務(wù)過(guò)多,jar也會(huì)過(guò)多。

2:給消費(fèi)者暴露了過(guò)多的接口。部分與消費(fèi)者無(wú)關(guān)的接口也暴露給對(duì)方。

方式二:

優(yōu)點(diǎn):

1:無(wú)需依賴過(guò)多jar包。

2:消費(fèi)者不要要過(guò)多接受消費(fèi)者提供的方法。

缺點(diǎn):

1:需要消費(fèi)者自己實(shí)現(xiàn)接口。

2:嚴(yán)重依賴文檔。在實(shí)現(xiàn)接口時(shí),對(duì)于所有信息都要有文檔定義。如:請(qǐng)求方式,請(qǐng)求參數(shù),返回值等。

3:自己完成Dto,Vo的編寫?! ?/p>

六、小結(jié)一下

兩種調(diào)用方式,我把知道的優(yōu)缺點(diǎn)放在這了。關(guān)于如何選擇,請(qǐng)根據(jù)需要自己抉擇,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 后端報(bào)TypeError:Cannot?read?properties?of?null?(reading?‘xxx‘)的錯(cuò)誤解決

    后端報(bào)TypeError:Cannot?read?properties?of?null?(reading?‘

    這篇文章主要給大家介紹了關(guān)于后端報(bào)TypeError:Cannot?read?properties?of?null?(reading?‘xxx‘)錯(cuò)誤的解決辦法,這個(gè)錯(cuò)誤是開(kāi)發(fā)中常見(jiàn)的錯(cuò)誤之一,需要的朋友可以參考下
    2023-05-05
  • 在CentOS系統(tǒng)中檢測(cè)Java安裝及運(yùn)行jar應(yīng)用的方法

    在CentOS系統(tǒng)中檢測(cè)Java安裝及運(yùn)行jar應(yīng)用的方法

    這篇文章主要介紹了在CentOS系統(tǒng)中檢測(cè)Java安裝及運(yùn)行jar應(yīng)用的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • SpringBoot封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過(guò)程詳解

    SpringBoot封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了SpringBoot封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過(guò)程,SpringBoot響應(yīng)數(shù)據(jù)封裝是指在SpringBoot應(yīng)用程序中,將返回的數(shù)據(jù)進(jìn)行封裝,以便于前端頁(yè)面或其他客戶端使用,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 如何實(shí)現(xiàn)Spring?Event(異步事件)

    如何實(shí)現(xiàn)Spring?Event(異步事件)

    這篇文章主要介紹了如何實(shí)現(xiàn)Spring?Event(異步事件)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JAVA基于Arrays.sort()實(shí)現(xiàn)數(shù)組升序和降序

    JAVA基于Arrays.sort()實(shí)現(xiàn)數(shù)組升序和降序

    這篇文章主要介紹了JAVA基于Arrays.sort()實(shí)現(xiàn)數(shù)組升序和降序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 淺談Java中ABA問(wèn)題及避免

    淺談Java中ABA問(wèn)題及避免

    這篇文章主要介紹了淺談Java中ABA問(wèn)題及避免,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程

    Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程

    JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口( JAVA API),用來(lái)連接 Java 編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解JDBC API及數(shù)據(jù)庫(kù)連接池
    2022-12-12
  • Springboot整合Socket實(shí)現(xiàn)單點(diǎn)發(fā)送,廣播群發(fā),1對(duì)1,1對(duì)多實(shí)戰(zhàn)

    Springboot整合Socket實(shí)現(xiàn)單點(diǎn)發(fā)送,廣播群發(fā),1對(duì)1,1對(duì)多實(shí)戰(zhàn)

    本文主要介紹了Springboot整合Socket實(shí)現(xiàn)單點(diǎn)發(fā)送,廣播群發(fā),1對(duì)1,1對(duì)多實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析

    基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析

    這篇文章主要介紹了基于java實(shí)現(xiàn)斗地主代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JavaWeb實(shí)現(xiàn)多文件上傳及zip打包下載

    JavaWeb實(shí)現(xiàn)多文件上傳及zip打包下載

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)多文件上傳及zip打包下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論