您好,登錄后才能下訂單哦!
本篇內容介紹了“Ribbon的饑餓加載模式怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
目前測試的時候發現在服務都成功啟動的時候第一次訪問會有報錯的情況發生,但是之后又恢復正常訪問
通過查詢相關文檔,了解到要解決此問題那么讓需要實例化的類提前創建,而不是在第一次調用的時候創建
主要是Ribbon進行客戶端負載均衡的Client并不是在服務啟動的時候就初始化好的,而是在調用的時候才會去創建相應的Client,所以第一次調用的耗時不僅僅包含發送HTTP請求的時間,還包含了創建RibbonClient的時間,這樣一來如果創建時間速度較慢,同時設置的超時時間又比較短的話,很容易就會出現上面所描述的顯現。
因此我們可以通過設置:
ribbon.eager-load.enabled=true ribbon.eager-load.clients=cloud-shop-userservice
參數說明:
ribbon.eager-load.enabled
:開啟Ribbon的饑餓加載模式
ribbon.eager-load.clients
:指定需要饑餓加載的服務名
Ribbon的饑餓加載(eager-load)模式
我們在使用Spring Cloud的Ribbon或Feign來實現服務調用的時候,如果我們的機器或網絡環境等原因不是很好的話,有時候會發現這樣一個問題:我們服務消費方調用服務提供方接口的時候,第一次請求經常會超時,而之后的調用就沒有問題了。
下面我們就來說說造成這個問題的原因,以及如何解決的方法。
造成第一次服務調用出現失敗的原因主要是Ribbon進行客戶端負載均衡的Client并不是在服務啟動的時候就初始化好的,而是在調用的時候才會去創建相應的Client,所以第一次調用的耗時不僅僅包含發送HTTP請求的時間,還包含了創建RibbonClient的時間,這樣一來如果創建時間速度較慢,同時設置的超時時間又比較短的話,很容易就會出現上面所描述的顯現。
從日志中我們也能知道這一點細節,在第一次發起調用的時候我們可以從日志中看到如下信息:
2017-09-25 08:29:54,201 INFO [main] com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client hello-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=hello-service,current list of Servers=[192.168.99.176:9901],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:192.168.99.176:9901; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:ConsulServerList{serviceId='hello-service', tag=null}
而Feign的實現基于Ribbon,所以它也有一樣的問題,下面就來看看如何解決這個問題。
解決的方法很簡單,既然第一次調用時候產生RibbonClient耗時,那么就讓它提前創建,而不是在第一次調用的時候創建。
在Spring Cloud的Dlaston版本中提供了幾個新的參數,它們可以很方便的幫我們實現這樣的功能。
ribbon: eager-load: enabled:true clients:kong-auth,kong-uc-service
參數說明:
ribbon.eager-load.enabled
:開啟Ribbon的饑餓加載模式
ribbon.eager-load.clients
:指定需要饑餓加載的客戶端名稱、服務名
通過上面的配置完成之后,我們嘗試重啟一下服務消費者,這個時候我們會發現,我們沒有開始調用服務接口,但是上面初始化負載均衡的日志就已經打印出來了。
這就說明我們對ribbon的饑餓加載模塊設置已經生效了。
“Ribbon的饑餓加載模式怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。