spring cloud中,feign常見問題的總結。
**示例:
@feignclient("microservice-provider-user")
public inte***ce userfeignclient
**示例:
@feignclient("microservice-provider-user")
public inte***ce userfeignclient
這邊的@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支援呢?
需要以下兩步:
第一步:新增依賴,示例:
org.springframework.cloud
spring-cloud-starter-hystrix
第二步:在啟動類上新增@enablecircuitbreaker
註解,示例:
@enablefeignclients
@enablediscoveryclient
@enablecircuitbreaker
public static void main(string args) }
這樣修改以後,訪問任意的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 = "$")
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...