使用RestTemplate類調用其他系統的url的時候,加上ribbon的註解@LoadBalanced上這個註解之後訪問,就報錯了。
報錯如下:
因爲這裏你不能直接訪問地址,需要把地址改成你所調用的ur在eureka上註冊的application.name
將代碼修改爲如下,就可以訪問了
具體原因,我查看了一下源碼和網上找了一下,貌似是在加了了註解 @LoadBalanced 之後,我們的r estTemplate 會走這個類RibbonLoadBalancerClient,斷點進入瞭如下的頁面,serverid必須是我們訪問的服務名稱 ,當我們直接輸入ip的時候獲取的server是null,就會拋出異常
使用服務名稱如下圖:
仔細想了想,因爲ribbon的作用是負載均衡,那麼你直接使用ip地址,那麼就無法起到負載均衡的作用,因爲每次都是調用同一個服務,當你使用的是服務名稱的時候,他會根據自己的算法去選擇具有該服務名稱的服務。