背景介紹:相同代碼,開發環境我們提供的dubbo接口供調用每次沒問題,但是測試環境部分接口每次調用一次卻發現日志是三次調用或者兩次。然後我們開始爬坑。。。
1.我們首先确認了代碼完全一直。然後用postman模拟調用,不論是開發還是測試都是一次請求一次調用,完全沒問題。
2.消費方:明明頁面點選一次調用卻又三次調用日志。
分析:通過提供方日志分析:沒隔一秒都會被調用一次,這個時候我們懷疑規律有問題開始排查調用方;
調用方日志分析:同一個接口正常的開發環境調用和響應時間間隔兩秒多,沒有問題。一次調用一次響應。
why:百度學習一波啊。我的天!!!好多人也這樣遇到過。好吧。順帶補習下知識樂。
問題解決原理-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、說明用戶端的配置優先級高于服務端的優先級。
這就是問題的關鍵點:看代碼,調用方沒有預設取dubbo服務時間。這個時間正好就是1秒重連機制。最後我們修改調用方的dubbo接口添加: timout=“60000” retries="0"!!!完美的解決了問題。