一.为什么会用xxl-job
项目要求,单开一个服务专门跑定时任务,不使用框架自带的,而选择技术中台的xxl-job进行集成使用。
二.集成过程报错
按照文档进行集成,发现各种报错,联系技术中台,回复的是我们自己的问题(虽然确实是,但是为什么不能使用,他们也说不上来)
1.msg:xxl-job remoting error(connect timed out), for url :http://ip..........
这边看服务启动,日志显示远程注册失败,集成步骤,代码都没有报错,服务也是正常启动的
原因:我们到技术中台是网络不通的,走的网关服务,需要进行我们系统服务到xxl-job调度中心双向网络打通,打通了......就报下面的错了
2.msg:xxl-rpc remoting error(Connection refused (Connection refused)),for url :http://ip....../run
这个/run让我就疑惑了,我们系统没有该方法,甚至手搓了一个/run方法,还是报这个错,无论是怎么改ip,使用nginx ip然后进行网络打通,使用注册中心地址进行网络打通,都会报错xxx/run
三.自己本地集成一个xxl-job玩玩
1.上xxl-job那边下载你想集成的版本
分布式任务调度平台XXL-JOB
2.下载源码后,分开里面的xxl-job-admin和xxl-job-executor-sample-springboot单独是一个springboot启动,然后执行里面自带的数据库sql(调度中心使用)
3.服务部署ok,sql执行ok,启动ok,调度中心启动!
http://127.0.0.1:9980/xxl-job-admin/jobinfo
端口用自己设置的
4.配置文件
这个是在调度中心里看到的执行器对应项目中的配置文件:
xxl.job.executor.appname=xxl-job-executor-sample
这个是在调度中心中的任务管理中的方法对应项目中的执行方法:
@XxlJob("demoJobHandler")
5.服务启动并点击执行一次,查看现象:
服务启动,日志打印说远程注册成功,执行一次看自己的打印结果,可打印
四.问题解决
定位原因:执行注册的ip不正确,执行的ip不变,但是端口不能与服务端口一致,服务端口设置为8087,执行端口设置为8086,nginx映射为38087和38086,使用的是容器云部署,所以部署的时候需要设置两个端口,也就是需要配置两个负载,最后问题解决