ribbon的註解使用報錯--No instances available for [IP]

使用RestTemplate類調用其他系統的url的時候,加上ribbon的註解@LoadBalanced上這個註解之後訪問,就報錯了。

 

 

 

報錯如下:

 

因爲這裏你不能直接訪問地址,需要把地址改成你所調用的ur在eureka上註冊的application.name

將代碼修改爲如下,就可以訪問了

 

具體原因,我查看了一下源碼和網上找了一下,貌似是在加了了註解 @LoadBalanced 之後,我們的r estTemplate 會走這個類RibbonLoadBalancerClient,斷點進入瞭如下的頁面,serverid必須是我們訪問的服務名稱 ,當我們直接輸入ip的時候獲取的server是null,就會拋出異常

 

 

使用服務名稱如下圖:

 

仔細想了想,因爲ribbon的作用是負載均衡,那麼你直接使用ip地址,那麼就無法起到負載均衡的作用,因爲每次都是調用同一個服務,當你使用的是服務名稱的時候,他會根據自己的算法去選擇具有該服務名稱的服務。