本文将介绍如何将现有的开源XXLJOB任务导入阿里云XXLJOB中,无需修改任何代码,就可完成任务的重新部署。使用户获得更高的可靠性、扩展性、安全性和管理便捷性,同时能够节约成本并专注于业务发展。
方案概览
将自建XXLJOB迁移至阿里云XXLJOB大致分为4步,如下:
云监控创建报警联系人:创建报警联系人,以接收系统健康状态和性能指标的报警信息。
从自建XXLJOB导出信息:从自建的XXL-JOB系统中导出任务信息和配置。
导入到阿里云XXLJOB:在阿里云的XXL-JOB环境中导入从自建系统中导出的任务信息。
重新部署应用:完成任务导入后,进行应用的重新部署,确保应用能够在新的环境下正常运行。
1.云监控创建报警联系人
如果您已经有云监控报警联系人,则可跳过该步骤。
登录云监控:云监控报警联系人,创建联系人并配置报警(支持手机、邮箱和webhook)。
创建完成后,需要点击激活才能使用,如下:
2.从自建XXLJOB导出信息
目前支持的版本包括 2.2.x
、2.3.x
、2.4.x
三个版本。在导出时,请选择相应的版本进行操作。
下载工具,地址:https://schedulerx3.oss-cn-hangzhou.aliyuncs.com/xxljob/xxljob-export.tar。
解压工具包,在application.properties文件中进行导出配置(xxl-job数据库配置以及应用名配置)。
### xxl-job, datasource datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai datasource.username=root datasource.password=123456 datasource.driver-class-name=com.mysql.cj.jdbc.Driver #导出任务过滤条件配置项 #过滤指定任务应用组app-name,多个以","分割(可选,不设置的情况下导出所有任务分组) #xxl-job.filter.app-name=xxl-job-executor-sample1,xxl-job-executor-sample2 #过滤指定任务描述,包含指定字符串(可选) #xxl-job.filter.job-desc=test #过滤指定任务作者信息,包含指定字符串 (可选) #xxl-job.filter.author=test #过滤指定触发状态的任务配置,不配置时导出所有状态任务(可选) #xxl-job.filter.trigger-status=0 #分页读取:按任务id排序,读取任务的启始位置,默认0(可选) #xxl-job.filter.page-start=0 #分页读取:按任务id排序,读取任务的启始位置后多少行记录,默认无限大(可选) #xxl-job.filter.page-size=10 #导出后任务默认状态值,0:禁用, 1:启用,默认为任务原始状态 (可选) #xxl-job.default.job-status=0 #任务报警联系人云监控名字,多个以","分割 (可选) #xxl-job.alarm.users=张三,李四 #任务报警联系通道,sms:短信, mail:邮件, phone:电话, webhook:钉钉/飞书/企业微信,多个以","分割(可选) #xxl-job.alarm.channel=sms,mail
说明建议把云监控联系人(xxl-job.alarm.users)和报警方式(xxl-job.alarm.channel)在application.properties进行配置。
执行
./start.sh $version
命令运行导出操作。若不传入version,默认执行2.2.0版本。# sh start.sh 默认执行2.2.0版本 sh start.sh 2.3.0
执行完成后,在当前目录下获得 xxljob_version_*******.json的任务配置文件(仅Bean模式的任务配置信息)。
以2.2.0版本为例,导出格式如下:
最外层结构包括version、type、kind、content等字段,其中content为导出的具体任务内容。
在content中,以应用app进行划分,分别导出各应用下的所有任务;其中每一个元素包括appName和jobConfigInfo两个字段。
jobConfigInfo是一个数组类型,其中包括在对应应用下的任务信息列表,任务信息字段包括name、jobType、timeConfig等。
{ "content":[ { "appName":"app2", "description":"应用分组2", "jobConfigInfo":[ { "attemptInterval":30, "contactInfoList":[ { "contactType":1, "name":"张三" }, { "contactType":1, "name":"李四" } ], "content":"{\"jobHandler\":\"failJobHandler\"}", "description":"test-job04, 负责人:cxy", "executeMode":"standalone", "jobType":"xxljob", "maxAttempt":0, "monitorConfigInfo":{ "alarmType":"CustomContacts", "sendChannel":"sms,mail", "timeout":10 }, "name":"test-job04", "parameters":"", "routeStrategy":2, "status":0, "timeConfig":{ "dataOffset":0, "timeExpression":"* * * 1 * ?", "timeType":1 } }, { "attemptInterval":30, "contactInfoList":[ { "contactType":1, "name":"张三" }, { "contactType":1, "name":"李四" } ], "content":"{\"jobHandler\":\"shardingJobHandler\"}", "description":"test-job03, 负责人:cxy", "executeMode":"broadcast", "jobType":"xxljob", "maxAttempt":0, "monitorConfigInfo":{ "alarmType":"CustomContacts", "sendChannel":"sms,mail", "timeout":0 }, "name":"test-job03", "parameters":"", "routeStrategy":8, "status":1, "timeConfig":{ "dataOffset":0, "timeExpression":"* * 18 * * ?", "timeType":1 } } ] } ], "kind":"SchedulerXJobs", "overwrite":true, "type":"JSON", "version":"2.0" }
3.导入到阿里云XXLJOB
将导出后的 JSON 文件直接上传至阿里云 XXL-JOB,即可轻松完成批量任务的导入。
登录微服务引擎MSE,选择 ,进入指定XXLJOB实例,选择导入任务。
导入任务表单选项描述:
相同任务:默认为覆盖,即当导入的任务在系统中已存在相同任务名时,直接覆盖原有任务的字段信息;若选择跳过,则跳过已存在的任务,不进行操作。
是否自动创建应用:默认是,即当导入任务时,若json文件中的应用在系统中不存在,则自动创建该应用,并将该应用下的所有任务导入;若选择否,若系统中不存在对应的应用,则json文件中该应用下的所有任务都不会导入。
选择导出的任务配置文件执行导入,即可完成xxl-job任务配置信息至SchedulerX任务配置信息同步。
4.重新部署应用
进入微服务引擎MSE,选择 ,进入指定XXLJOB实例。在应用管理,单击应用的接入配置。
选择接入方式2,为应用增加
-D
参数,重启应用。接入成功后,控制台可以看到执行器数量。