Spring Cloud中,Feign常見問題總結

2021-08-17 02:49:06 字數 2764 閱讀 5604

spring cloud中,feign常見問題的總結。

**示例:

@feignclient

( "microservice-provider-user")

public

inte***ce

userfeignclient

", method = requestmethod.get)

public

user

findbyid

(@pathvariable("id"

) long id);

... }

**示例:

@feignclient

( "microservice-provider-user")

public

inte***ce

userfeignclient

", method = requestmethod.get)

public

user

findbyid

(@pathvariable("id"

) long id);

... }

這邊的@pathvariable("id")中的」id」,不能省略,必須指定。

如果想要請求microservice-provider-user服務,並且引數有多個例如:http://microservice-provider-user/query-by?id=1&username=張三 要怎麼辦呢?

直接使用複雜物件:

@feignclient

( "microservice-provider-user")

public

inte***ce

userfeignclient

該請求不會成功,只要引數是複雜物件,即使指定了是get方法,feign依然會以post方法進行傳送請求。

正確的寫法:

寫法1:

@feignclient

( "microservice-provider-user")

public

inte***ce

userfeignclient

寫法2:

@feignclient

( name =

"microservice-provider-user"

)

public

inte***ce

userfeignclient

我們知道feign本身就是支援hystrix的,可以直接使用@feignclient(value = "microservice-provider-user", fallback = ***.class)來指定fallback的類,這個fallback類整合@feignclient所標註的介面即可。

但是假設我們需要使用hystrix stream進行監控,預設情況下,訪問http://ip:port/hystrix.stream 是個404。如何為feign增加hystrix stream支援呢?

需要以下兩步:

第一步:新增依賴,示例:

<

dependency

>

org.springframework

.cloud

groupid>

<

artifactid

>

spring-cloud-starter-hystrix

artifactid

>

dependency

>

第二步:在啟動類上新增@enablecircuitbreaker註解,示例:

@enablefeignclients

@enablediscoveryclient

@enablecircuitbreaker

public

class

}

這樣修改以後,訪問任意的api後,再訪問http://ip:port/hystrix.stream,就會展示出一大堆的api監控資料了。

如果包重疊,將會導致所有的feign client都會使用該配置。

詳見:spring cloud中,如何解決feign/ribbon第一次請求失敗的問題?

(1) serviceid屬性已經失效,盡量使用name屬性。例如:

@

feignclient(

serviceid =

"microservice-provider-user")

@

feignclient(

name =

"microservice-provider-user")

(2) 在使用url屬性時,在老版本的spring cloud中,不需要提供name屬性,但是在新版本(例如brixton、camden)@feignclient必須提供name屬性,並且name、url屬性支援佔位符。例如:

@feignclient(name = 

"$", url =

"$")

spring cloud中,feign常見問題總結

SpringCloud微服務基礎4 Feign

spring cloud feign是一套基於netflix feign實現的宣告式服務呼叫客戶端。它使得編寫web服務客戶端變得更加簡單。我們只需要通過建立介面並用註解來配置它既可完成對web服務介面的繫結。它具備可插拔的註解支援,包括feign註解 jax rs註解。它也支援可插拔的編碼器和解碼...

SpringCloud中的gateWay 閘道器

1 api閘道器介紹 2 spring cloud gateway 3 spring cloud gateway核心概念 所有服務,都需要在nacos中註冊服務 包括閘道器 注意版本號 服務註冊nacos org.springframework.cloud groupid spring cloud ...

SpringCloud中eureka治理元件的原理

當新增了乙個eureka client元件到乙個springboot工程時,依賴,屬性,註解會啟動乙個eureka client程序,完成和服務端互動 1.1註冊 程式啟動時會攜帶自身的資訊,包括服務名稱,包括ip位址,包括埠號,等引數,以http協議請求訪問 defaultzone 可以通過 eu...