天天看點

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

一 負載均衡

大家有沒有發現在上一篇中,我們已經把springcloud負載均衡的配置加入到了項目中,如下圖:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

并且restTemplate()方法上也加了實作負載均衡的注解@LoadBalanced,如圖:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

那麼我們怎麼來示範負載均衡呢?

我們在cloud_cart_service1項目的基礎上,重建立一個cloud_cart_service2項目,提供的服務名稱一緻,端口号變了,如圖:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

為了友善觀察效果,我在details方法上加上一句話表明結果來自哪個服務,如圖所示:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞
SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

啟動兩個服務提供者以及服務消費者,這時注冊中心如下圖:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

可以看到這時候注冊的服務提供者有2個,2222和2221。

接下來我們來執行用戶端: http://localhost:9999/client/details.do?id=20191203135140574001,反複執行,發現如圖所示的結果:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞
SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

說明負載均衡實驗成功了!!!!

restTemplate參數傳遞

對于get請求,比較簡單,不作探讨,這裡重點是來講一下post請求的參數傳遞問題。

Post請求一般用的比較多的方法是restTemplate.postForObject(url, params,Object.class);

服務提供者如圖所示:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

服務提供者我們用@RequestParam注解來接收參數,即可接收post請求,又可以接收get請求,并輸出一句話來觀察參數是否接收到了

服務消費端我們也用@RequestParam注解來接收參數,如圖所示:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

接下來執行: http://localhost:9999/client/list.do,觀察背景:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

發現參數沒有傳遞過來

接下來,我們把服務端的注解改為@RequestBody ,重新執行,觀察

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

,結果如下圖所示:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

發現參數順利傳遞過來了。

當服務提供者硬是要使用@RequestParam注解來接收參數呢,那用戶端需要用MultiValueMap來添加參數,不能用hashmap或linkmap來封裝參數了。

MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

paramMap.add("cartType", "20190624100613533130");

也可以直接寫在方法上,如圖:

服務提供端:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

服務消費端:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

執行結果:

SpringCloud系列三:Springcloud負載均衡及restTemplate參數傳遞

這種方式參數也能順利接收到

Ok,本篇到此為止,希望對您有幫助。

繼續閱讀