springcloud服務間的呼叫

2021-08-20 09:51:08 字數 1792 閱讀 9661

一。resttemplate的方式

1.url寫死的方式

resttemplate resttemplate = new resttemplate();

string msg = resttemplate.getforobject("http://localhost:8080/server/msg" , string.class);

該方式傳送get請求,指定返回型別即可。

2.通過服務名的方式動態呼叫服務

在使用類上面注入loadbalancerclient 類

@autowired

private loadbalancerclient loadbalancerclient;

resttemplate resttemplate = new resttemplate();

serviceinstance serviceinstance = loadbalancerclient.choose("product"); //product為註冊到中心的服務名

string msg = resttemplate.getforobject(url , string.class);

該方式可以實現負載均衡的去呼叫product服務。

3.通過註解的方式動態呼叫服務

宣告乙個bean如下:

@component

public class resttemplateconfig

}

在使用的地方將其注入,並通過服務名動態呼叫相關服務

string msg = resttemplate.getforobject("http://product/server/msg" , string.class);
該方式和第2種方式一樣,也能實現負載均衡的效果。

二。通過feign的方式呼叫

1.引入依賴

org.springframework.cloud

spring-cloud-starter-openfeign

springcloud低版本2.0.0以下請使用如下依賴:

org.springframework.cloud

spring-cloud-starter-feign

2.宣告服務呼叫客戶端類

@feignclient(name = "目標服務名稱")

@component

public inte***ce serviceclient

@enablefeignclients(basepackages = "com.gzcstec.product.client")
注意如果是serviceclient類是其他服務打包提供的,需要在basepackages配置serviceclient類的路徑

使用非常方便,只需將serviceclient注入到使用的地方,則直接使用service方式進行呼叫即可。該種方式也實現負載均衡的效果,需要注意的是如果是提供服務方通過直接打包的方式對外提供服務的,則服務消費方直接使用服務方的feign依賴即可,無需再次引入feign依賴,防止版本不一致導致呼叫失敗。

SpringCloud服務間呼叫

springcloud服務間的呼叫有兩種方式 resttemplate和feignclient。不管是什麼方式,他都是通過rest介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。因為spring mvc的restcontroller定義的介面,返回的資料都是通過ja...

SpringCloud服務間呼叫

springcloud服務間的呼叫有兩種方式 resttemplate和feignclient。不管是什麼方式,他都是通過rest介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。因為spring mvc的restcontroller定義的介面,返回的資料都是通過ja...

SpringCloud服務間呼叫 負載均衡策略調整

比如我建立的乙個訂單服務 order service,要呼叫我的商品服務product service裡面的介面,預設使用輪詢的負載均衡策略 現在我要使用隨機分配,如何操作呢?要指定呼叫的服務名稱product service randomrule為隨機分配,更多策略參考 server port 8...