前言:前面我們使用的resttemplate實現rest api呼叫,**大致如下:
("/buy/"
)public product order()
由**可知,我們是使用拼接字串的方式構造url的,該url只有乙個引數。但是,在現實中,url 中往往含有多個引數。這時候我們如果還用這種方式構造url,那麼就會非常痛苦。那應該如何解決?
解釋:feign是netflix開發的宣告式,模板化的http客戶端,其靈感來自retrofit,jaxrs-2.0以及websocket.
1、feign可幫助我們更加便捷,優雅的呼叫http api。
2、在springcloud中,使用feign非常簡單——建立乙個介面,並在介面上新增一些註解,**就完成了。
3、feign支援多種註解,例如feign自帶的註解或者jax-rs註解等。
4、springcloud對feign進行了增強,使feign支援了springmvc註解,並整合了ribbon和eureka, 從而讓feign的使用更加方便。
(1)引入依賴
在服務消費者 order_service 新增fegin依賴
<
!--springcloud整合的openfeign--
>
org.springframework.cloud<
/groupid>
spring-cloud-starter-openfeign<
/artifactid>
<
/dependency>
(2)啟動類新增feign的支援通過@enablefeignclients註解開啟spring cloud feign的支援功能
@entityscan
("cn.itcast.order.entity"
)//啟用feign
@enablefeignclients
public
class
}(3)宣告被呼叫的微服務介面,介面類啟用feignclient
建立乙個feign介面,此介面是在feign中呼叫微服務的核心介面
在服務消費者 order_service 新增乙個 productfeginclient 介面
/**
* 宣告需要呼叫的微服務名稱
* @feignclient
* * name : 服務提供者的名稱
*/@feignclient
(name=
"service-product"
)public
inte***ce
productfeignclient
",method = requestmethod.get)
public product findbyid
(@pathvariable
("id"
) long id)
;}
1、定義各引數繫結時,@pathvariable、@requestparam、@requestheader等可以指定引數屬 性,在feign中繫結引數必須通過value屬性來指明具體的引數名,不然會丟擲異常
2、@feignclient:註解通過name指定需要呼叫的微服務的名稱,用於建立ribbon的負載均衡器。 所以ribbon會把 shop-service-product 解析為註冊中心的服務。
(4)修改服務呼叫者order_service的呼叫方式
修改 ordercontroller ,新增productfeginclient的自動注入,並在order方法中使用productfeginclient介面類完成微服務呼叫
@restcontroller
("/order"
)public
class
ordercontroller
",method = requestmethod.get)
public product findbyid
(@pathvariable long id)
}
(5)測試效果請求介面:
呼叫元件Feign
有服務消費方呼叫提供方,之前採用的是resttemplate。1 在pom.xml中引入openfeign的啟動器 org.springframework.cloud spring cloud starter openfeign feign hystrix enabled true 開啟feign的...
四 Spring Cloud 的 Feign 元件
org.springframework.cloud spring cloud starter feign 注意 feignclient註解中的cloud service為eureka註冊的服務名。原理 在eureka註冊的cloud service工程中,也有乙個controller有相同的find...
springCloud元件2FEIGN使用
springcloud的服務大哥 feign元件 每乙個服務之間的呼叫度必須需要通過feign這個大哥來發現和分配任務 feign元件的註冊宣告 feignclient 通過這個註解來宣告使用feign元件進行服務呼叫 前台是需要有乙個eureka或zookeep等作為乙個服務註冊中心 feign元...