1. 程式人生 > >dubbo超時與超時後自動重複呼叫的問題

dubbo超時與超時後自動重複呼叫的問題

問題陳述:

工作中遇到一個問題,服務一通過dubbo呼叫服務2,問題是最終結果是服務一最終成功了,但是服務二被執行了兩次。

問題分析

通過分析報文可以發現,服務二被呼叫了兩次,兩次訪問時間間隔為3秒,並且都成功了。

而在服務一這邊的日誌顯示,有一個dubbo服務呼叫超時的異常,然後雖然超時了,但在3秒多的時候又返回了結果,提示warn,然後按照正常的流程走了下去。

最終就是服務一成功執行一次,雖然中間報了超時異常,服務二被呼叫了兩次。

問題解決原理-dubbo超時重連機制

dubbo有這樣幾個機制

1、如果超時,但是最終返回了正確結果,只是warn,依舊按照正常流程走下去。

2、dubbo:provider 可以設定超時時間 timout,以及如果超時允許被重連的次數 retries

3、dubbo:reference  可以設定超時時間,以及如果超時 timout,允許重連服務的次數 retries

4、dubbo:reference retries 的預設值和consumer一樣,而consumer預設為2次

<dubbo:consumer> retries default.retries int 可選 2

5、說明客戶端的配置優先順序高於服務端的優先順序。

問題解決實踐-自己重新配置

1、我的dubbo:provider timeout 是3000 即3秒,而實際呼叫時3秒多一些,所以把這個延長到60000,當然更長也可以,retries="0",保持不變

2、我的dubbo:reference timeout 沒有配置,retries也沒有配置,現在這兩個屬性也配置為 timout=“60000” retries="0"

參考文件