在使用 XXL-Job 时,有时我们会遇到启动时的端口冲突问题,例如报错 xxl-rpc provider port is used。本文将为大家介绍该错误的原因及相应的解决方案。
下面是问题描述和问题解决记录。
问题描述
xxl-job 的执行器和任务配置都是正确的,但是一启动 java 项目就报端口 18437 已经被使用。
xxl-rpc provider port is used
这个问题,通常情况下是 XXL-Job 执行器在启动时尝试绑定的 RPC 端口(默认是 18437)已被占用,导致启动失败。此问题可能是由于其他应用或实例占用了相同的端口,也可能是因为同一个执行器被多次启动。具体原因可能是 idea 的原来一个窗口同一个项目(不同的分支)启动过,虽热项目停止了,也把 idea 窗口关掉了,但是端口还是被占用了。
XXL-Job 执行器使用 RPC 通信来接受调度中心的任务调度请求,默认情况下会在 18437 端口启动一个 RPC 服务。如果该端口被其他进程占用,执行器就无法正常启动,抛出上述错误。
常见的导致端口冲突的原因包括:
1、端口被其他应用占用:系统中可能已经有其他程序使用了 18437 端口。
2、重复启动 XXL-Job 执行器:如果同一个项目启动了多个 XXL-Job 执行器实例,它们可能会尝试绑定相同的端口。
问题解决
方案一:干掉端口占用的进程
如果只需要一个执行器启动,那么既然端口被占用了那就直接找到端口被占用的程序,然后干掉即可。
C:\Users\wankun>netstat -ano|findstr "18437"
TCP 0.0.0.0:18437 0.0.0.0:0 LISTENING 45736
TCP [::]:18437 [::]:0 LISTENING 45736
C:\Users\wankun>tasklist|findstr "45736"
java.exe 45736 Console 2 709,904 K
C:\Users\wankun>
把 java.exe 干掉,然后再启动项目就好了。
如果需要同时启动多个执行器,可以为每个执行器配置不同的 RPC 端口。
方案二:修改端口
如果不希望关闭占用端口的进程,可以修改 XXL-Job 执行器的配置,将其 RPC 端口改为其他未占用的端口,或者让系统自动分配端口。
程序配置文件添加或修改配置,可以设置端口为 0 表示由系统自动分配可用端口,这可以避免手动指定端口的麻烦。
如 application.properties 为 xxl.job.executor.port=0
application.yml 为:
xxl:
job:
executor:
port: 0
总结
XXL-Job 执行器启动时的 xxl-rpc provider port is used 错误通常是由于端口 18437 被占用引起的。通过检查端口占用情况,或者修改配置文件中的 RPC 端口,或确保没有重复启动执行器实例,可以快速解决此问题。