XXL-Job端口額外占用問題的解決方法小結(jié)
1. 前言
最近博主在Spring整合XXL-JOB到項目時發(fā)現(xiàn)了個問題,注冊執(zhí)行器需要額外占用端口,也就是我們每啟動一個程序,除了程序本身的API端口外,還需要額外開放一個執(zhí)行器端口。
這樣看起來沒啥,但是如果放到Docker容器中,用戶不顯示指定執(zhí)行器端口的話,默認(rèn)占用9999端口,假如我想啟動兩個實例,那么必定會發(fā)生端口沖突,也就是我必須為每個實例指定執(zhí)行器端口,假如我有10個實例,那也太麻煩了的吧,然后去xxl-job github查看,發(fā)現(xiàn)issue都已經(jīng)1.2k個了,這個問題也老早就有人提了Issue,可是作者不太理人不管事哈哈(可能生活太忙維護(hù)不過來啦)
2. 問題解決
2.1. 下載源碼
我這里找到一位老哥修改的克隆版本,移除了netty組件,使執(zhí)行器端口與Springboot的web端口一致
首先下載修改后的源碼:kdyzm/xxl-job: 本項目是xxl-job 項目的克隆項目,目的在于優(yōu)化和修復(fù)原項目中的問題 (github.com)
和官方源碼一樣,分為三部分代碼,只是修改了部分源碼
2.2. 啟動admin服務(wù)器
我們接下來修改xxl-job-admin的配置文件application.properties,修改admin服務(wù)端端口
修改訪問密鑰,這個我們在被調(diào)度方會使用到
修改數(shù)據(jù)源(數(shù)據(jù)庫還是沒變哈,可參考我以前部署xxl-job的文章)
配置完以上信息就可以啟動admin服務(wù)端啦
2.3. 項目引入core組件
修改core項目的pom文件 groupId配置,方便我們后續(xù)在項目中引用
接下來我們重新打包core項目,并install到我們本地倉庫
等待core項目install完成后,我們就可以在自己的項目中使用修改后的xxl-job core組件了
在自己項目application.yml中添加如下配置,端口設(shè)置為springboot服務(wù)端口
xxl: job: # 驗證信息 官網(wǎng)Bug https://github.com/xuxueli/xxl-job/issues/1951 accessToken: 123123123 # 注冊地址 admin: addresses: http://127.0.0.1:9090/xxl-job-admin # 注冊執(zhí)行器 executor: # 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務(wù) ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。 address: appname: lucky-draw-handler # 執(zhí)行器IP 配置為本機IP [選填]:默認(rèn)為空表示自動獲取IP,多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務(wù)"; ip: # 執(zhí)行器端口號 [選填]:小于等于0則自動獲取;默認(rèn)端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口; port: ${server.port} # 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限;為空則使用默認(rèn)路徑; logpath: ./logs # 執(zhí)行器日志文件保存天數(shù) [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關(guān)閉自動清理功能; logretentiondays: 30
新增配置類
@Configuration public class XxlJobConfig { @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.accessToken}") private String accessToken; @Value("${xxl.job.executor.appname}") private String appname; @Value("${xxl.job.executor.address}") private String address; @Value("${xxl.job.executor.ip}") private String ip; @Value("${xxl.job.executor.port}") private int port; @Value("${xxl.job.executor.logpath}") private String logPath; @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays; @Bean public XxlJobSpringExecutor xxlJobExecutor() { XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appname); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }
啟動項目即可發(fā)現(xiàn)自己執(zhí)行器成功注冊到了admin服務(wù)端
3. 總結(jié)
到此就實現(xiàn)了xxl-job走spring的接口,不額外占用端口,好處顯而易見,但也有一點壞處:導(dǎo)致定時任務(wù)調(diào)度共用了處理web請求的線程池。不過個人認(rèn)為還是利大于弊的,具體還是得看自己的選擇吧!
以上就是XXL-Job端口額外占用問題的解決方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于XXL-Job端口額外占用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
2024.1.2 安裝JDK和Eclipse并配置java編譯環(huán)境的過程
這篇文章主要介紹了2024.1.2 安裝JDK和Eclipse并配置java編譯環(huán)境,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩過的坑
IDEA旗艦版可以直接創(chuàng)建Spring MVC項目,但創(chuàng)建后的項目并不是直接就可以運行,還需要進(jìn)行一些配置。這篇文章主要介紹了Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩坑記 ,需要的朋友可以參考下2020-03-03Spring事務(wù)執(zhí)行流程及如何創(chuàng)建事務(wù)
這篇文章主要介紹了Spring事務(wù)執(zhí)行流程及如何創(chuàng)建事務(wù),幫助大家更好的理解和學(xué)習(xí)使用spring框架,感興趣的朋友可以了解下2021-03-03springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實現(xiàn)
本文主要介紹了springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07