記一次 XxlRpcException:xxl-rpc request timeout at 超時問題

事件起因

昨天有同事找我到,說他搭建的 XXL-JOB 任務調度系統不能工作了,調用總是出錯(服務端返回 500)希望我能幫忙處理一下,不過說實話我也沒有搭建過 XXL-JOB 的經驗,但是既然同事請求了,就只能硬着頭皮幫忙一起看下,解決的過程還算比較順利,但是發現網上這塊的資料很少,所以打算把解決過程用博客記錄下來,希望可以幫助到遇到同樣問題的同學們

解決過程

同事跟我說起初懷疑是 Shiro 攔截了定時任務的請求,但是他註釋了 Shiro 相關的代碼後,XXL-JOB 的請求還是無法成功(請求成功一次後,再次請求就出現標題的超時錯誤),然後我查看了 XXL-JOB 的請求日誌,服務端的 HTTP 返回碼是 500,錯誤日誌是 XxlRpcException: xxl-rpc, request timeout at ,基本排除了是 Shiro 認證導致的問題,原因是因爲 Shiro 是認證框架,認證不通過的話,返回的錯誤碼應該是 401 Unauthorized 類的異常,但是從 XXL-JOB 的日誌顯示這明顯是通信錯誤,難道是某個相關的服務被關了?

帶着這個疑問我去查了下 XXL-JOB 的文檔,項目要使用 XXL-JOB 的調用,就會引入的 xxl-job-core 包,xxl 客戶端項目就會在啓動時使用佔用一個端口監聽並且消費 XXL-JOB 發過來的調用(我們設置的端口是 9999),我嘗試啓動項目後觀察端口占用情況,項目啓動後端口 9999 是正常啓用的,然後在我使用 XXL-JOB 手動執行啓動後(第一次請求是成功的),然後我再查看端口情況,發現 9999 端口就已經關閉了,所以問題在這裏已經被找到了, 客戶端項目的 xxl 監聽端口被關閉,導致後續 XXL-JOB 請求都無法響應,自然也就請求超時,但是這明顯不像是程序問題,因爲以前沒出現過。近期纔開始出現。於是我通過搜索引擎找到了 xxl-job 官方在 github 的 Issue https://github.com/xuxueli/xxl-job/issues/586 ,通過 issue 的內容看到官方已經告知是版本的 BUG,並且在新版中這個 BUG 已經修復,以下是我使用的版本信息

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.0.0</version>
</dependency>

並且我發現這個版本在 mvnrepository 也幾乎沒人用

file

我果斷的把客戶端的 xxl-job-core 升級到官方推薦的最新版,代碼如下:

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.0.0</version>
</dependency>

然後啓動項目,在 XXL-JOB 手動執行任務,查看端口情況,問題解決。。更多技術諮詢,請關注公衆號,find me !alt 微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章