這節我們來實現下服務呼叫,之前在ribbon中實現的時候,發現呼叫其他的服務還是需要通過resttemplate來呼叫,現在既然所有的服務都註冊到了springcloud中,那麼我們是否有其他的方式呢。
springcloud提供了feign,直接通過服務名稱和對應介面進行呼叫,這樣,就像呼叫專案自己的服務內容一樣
feign是乙個宣告式的web服務客戶端。這使得web服務客戶端的寫入更加方便 要使用feign建立乙個介面並對其進行注釋。它具有可插入注釋支援,包括feign注釋和jax-rs注釋。feign還支援可插拔編碼器和解碼器。spring cloud增加了對spring mvc注釋的支援,並使用spring web中預設使用的httpmessageconverters
。spring cloud整合ribbon和eureka以在使用feign時提供負載均衡的http客戶端。
工程依舊是基於之前的工程繼續實現,之前的專案spring eureka實現,spring cloud ribbon實現
在專案中建立新的module,和之前建立專案一樣,只是配置中增加feign
我這邊工程名字是spring-feign-service
對應新增的pom.xml內容是:
org.springframework.cloud
spring-cloud-starter-openfeign
在專案的啟動類上加上註解@enablediscoveryclient加入springcloud eureka服務端,加上註解@enablefeignclients宣告為宣告性rest客戶端:feign
package com.springcloudfeign.feign;
import org.springframework.cloud.client.discovery.enablediscoveryclient;
import org.springframework.cloud.openfeign.enablefeignclients;
@enablediscoveryclient
@enablefeignclients
public static void main(string args)
}
然後建立乙個feigndemoservice的介面:
package com.springcloudfeign.feign.service;
import org.springframework.cloud.openfeign.feignclient;
import org.springframework.web.bind.annotation.requestmethod;
@feignclient(value = "spring-client-01")
public inte***ce feigndemoservice
增加feigncontroller:
package com.springcloudfeign.feign.web;
import com.springcloudfeign.feign.service.feigndemoservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller("/")
public class feigncontroller
}
這裡寫完之後 feigndemoservice下會有紅線提示,但不要緊,可以直接執行。
然後啟動之前的cloud-server,以埠號10001,10002依次啟動spring-client-01服務,啟動ribbon服務,再啟動這個feign服務。我這邊埠號配置的是10010,在postman或者瀏覽器中輸入:
http://localhost:10010/getinfotwo
多刷幾次,可以看到分別呼叫了兩個介面的的spring-client-01服務。
執行的結果和ribbon不同,是依次呼叫兩個埠
SpringCloud服務間呼叫
springcloud服務間的呼叫有兩種方式 resttemplate和feignclient。不管是什麼方式,他都是通過rest介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。因為spring mvc的restcontroller定義的介面,返回的資料都是通過ja...
Spring Cloud 跨服務呼叫
spring cloud中服務間呼叫有兩種restful呼叫方式,一種是resttemplate 另一種是feign。1 使用loadbalance註解,將resttemplate作為乙個bean配置 component public class resttemplateconfig 2 在cont...
SpringCloud服務間呼叫
springcloud服務間的呼叫有兩種方式 resttemplate和feignclient。不管是什麼方式,他都是通過rest介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。因為spring mvc的restcontroller定義的介面,返回的資料都是通過ja...