xxl-job使用遇到的問題


1、背景

最近公司在遷移定時任務,以前老的定時任務是基於quartz搭建的分布式集群服務,遇到如下幾個瓶頸問題:

  • 同一個任務只能有一個節點運行,其他節點不執行,導致性能低,資源也浪費
  • 定時任務在搶占執行的時候(數據庫鎖),誰先搶到誰執行,導致有些節點忙死,有些節點一直閑置。(沒有合理的調度策略)
  • 當碰到大量短任務時,各個節點頻繁的競爭數據庫鎖,節點越多這種情況越嚴重。性能會很低下
  • quartz 的分布式僅解決了集群高可用的問題,並沒有解決任務分片的問題,不能實現水平擴展(水平擴展的問題,其實通過任務分布式鎖的形式也能解決)

反正,最終選定了xxl-job。

想着寫寫xxl-job遷移說明的,但是網上太多了,官方指導手冊也挺多的,還是算了。就記錄下遇到的問題+解決方法吧。

2、問題

經過一番coding、配置 之后,在xxl-job任務調度中心界面上,點擊【執行一次】,調度日志顯示失敗,錯誤信息是這樣子的

xxl-rpc remoting error(Unexpected end of file from server), for url : http://10.25.31.45:9999/run

這個ip是我本機的,執行器注冊啥的都沒問題。

先說解決辦法

2.1、解決辦法

確認下netty的版本是否是4.1.48.Final。

Netty3、netty4可以共存,

但是每個只依賴一個主版本即可,netty4要4.1.48+

檢查下pom.xml,果然有貓膩

正常情況下,xxl-job-core 依賴的netty版本是 4.1.48.Final,在我這里變成了4.0.35~

看了下xxl-job.pom文件里面是使用的 ${netty-all.version} 屬性,這說明我的項目里面有別的地方也定義了這個值,覆蓋了xxl-job的4.1.48

在項目的pom文件里面定義netty-all.version 為 4.1.48.Final 就搞定了。

2.2、原因

mavan在處理依賴的時候,有如下兩個原則:

  • 最短路徑優先
  • 相同路徑下配置在前面的優先

那另外一個問題,你咋知道就是netty的問題呢?

(先賣個關子,后面再讀讀xxl-job的源碼)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM