最火的分布式调度系统 XXL-JOB 安装和简单使用
唉,在谈文章之前先说一下自己的情况。原计划是在上周六写完这篇文章的,然而周六的时候打开电脑的,按照平常"惯例",先补一些 “黑色五叶草”/“进巨”的番,然后刷着刷着就忘记写,接着就逛逛知乎,逛逛b站。啪地一下,趁我不注意,周六日就过去,于是就拖到了这周才来更新(立下的flag总是被自己打倒)。这周六日我有也有写部分,不过发现做一个这样的教程类文章也是挺耗时间(这篇文章差不多耗了我两个周末的时间),要先自己搭建完好之后,然后把其中每一步的操作都记录下来,相当于为了写这篇文章,我搭了2,3次 xxl-job 。 不过写完之后,感觉对于自己收获也挺大的,顺便复习了一下 Shell 的相关命令和 Java 项目的命令行启动。以后还是要加油啊!尽量坚持周更!向着大神们学习。

上一个篇文章 分布式调度任务系统调研及选型,我们介绍了常用的一些开源的分布式调度系统,知道了xxl-job 目前基本是中小型公司的第一选择。所以这篇文章,就来介绍一下xxl-job 的安装和简单使用。
这里安装是基于 Ubuntu 16.04 安装的。
另外我可没有标题党,我看了一下 GitHub 上开源的分布式调度系统,目前是 xxl-job 项目是分布式调度开源系统中最多 starts 的(当然也有可能因为这个 xxl-job 出来挺久了)

window ,mac 或docker 安装
如果为 window,mac 等安装,可以先根据github 上的 SQL 脚本创建好数据库和表,然后直接将github 上的源码 导入到 idea 按照Spring Boot 应用来启动即可。
如果为 docker 的安装,可以直接pull 官方镜像,然后运行时指定 MySQL 和存储日志目录即可。
下载镜像
# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建议指定版本号)
docker pull xuxueli/xxl-job-admin
创建容器并运行
# 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value --key2=value2" ;
# 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:{指定版本}
linux Ubuntu 16.04 安装 xxl-job
在linux下直接安装 xxl-job 会有点麻烦, 因为 xxl-job 并没有像 nacos 之类的直接提供了一个启动包,直接修改一下配置文件,然后运行启动脚本即可那种。xxl-job 是只提供了的源码文件,如果要运行,需要自己先将 java 源码 通过 maven 打包构建成运行包,然后才能运行。所以接下来我来详细讲述一下如何再linux 下安装启动 xxl-job,这里使用的 linux 版本为:Ubuntu 16.04。 其他版本也类似。
安装 jdk ,maven ,git 环境
首先我们先需要安装 Java 相关的环境,因为xxl-job 是 Java 开发的,在没有提供启动包的基础上,我们需要自己从源码解释编译成启动包,然后启动。
安装 JDK
安装有两种一种是直接根据 apt 的包安装,另一种是手动获取 java 包安装。这里我们为了简单起见使用 apt 直接安装,如果需要更多自定义的配置可以手动安装。执行运行以下两个命令即可安装 jdk8 版本的。
sudo apt-get update
sudo apt-get install openjdk-8-jdk -y
安装 maven
我们这里也直接采用 apt 包的安装
sudo apt-get -y update
sudo apt install maven -y
待安装完成之后,运行
mvn -v
即可检查是否安装成功了
这里安装了 maven 之后还需要将 maven 的默认的远程仓库地址换成 国内的远程仓库地址,不然下载 maven 依赖的时候会很慢。打开 /etc/maven/settings.xml 文件,在 标签里面添加以下内容,即可将默认仓库替换成阿里云的仓库。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
安装 GIT
我们这里还需要安装 GIT ,主要是为了可以方便复制源码到本机,当然也可以通过直接 curl 获取到文件,然后解压。不过 git 总是有用,所以我们这里也安装了
sudo apt-get -y update
sudo apt-get install git -y
安装数据库
初始化数据库的脚步为xxl-job的git 项目中的 /xxl-job/doc/db/tables_xxl_job.sql的文件,在已经安装了 MySQL 的机器上连接上,然后执行即可
默认xxl-job 是支持集群部署的,只要连接相同的数据库即可
另外如果 MySQL 有做主从部署,则 xxl-job 连接的一定要为主库,也不能使用读写分离的账号,否则在调度的时候可能会出现问题
git clone 源码文件,打包构建
git clone https://gitee.com/xuxueli0323/xxl-job.git
cd xxl-job/
mvn -B -Dmaven.test.skip=true clean package
cd xxl-job-admin/target
# 这里 根据不同的xxl-job的版本,文件名不一样
unzip xxl-job-admin-2.3.0-SNAPSHOT.jar
# 解压之后,进入BOOT-INT/target/class/ 目录即可看到调度中心的配置文件 `application.properties`,修改里面的数据库链接和密码即可,如果考虑调度系统的调用的安全性可以加上, xxl.job.accessToken= 参数
# 修改完成之后,然后进入到 /xxl-job/xxl-job-admin/target 目录下执行以下命令来启动 xxl-job
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
执行之后,如果启动成功会显示如下图这样

然后打开链接: http://127.0.0.1:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)
输入默认的账号和密码, “admin/123456”,登录即可看到调度中心。(需要将127.0.0.1 换成自己的机器的ip)

安装执行器项目
安装完成调度中心之后,我们还需要安装执行器项目,调度中心本身是不负责执行项目,要安装执行器之后,才能通过调度中心去执行器服务上执行。安装执行器项目很简单,基本上就是安装调度中心那样安装启动即可,我们这里为了简单起见,可以直接启动 xxl-job 自带Spring Boot的简单执行器。基于上面克隆下来的项目,我们进入 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target 目录。如果要修改调度中心的地址的信息、调度中心的验证的key等,可以修改配置文件,该执行器的配置文件为 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/BOOT-INF/classes/application.properties。
然后执行以下命令即可启动执行器项目:
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
简单使用 xxl-job
经过上面的步骤,我们就有一个简单的调度中心系统了。基于这个调度系统,我们可以随便创建调度任务。这里我示范一个创建一个每分钟定时请求 http://t.weather.itboy.net/api/weather/city/101280101 链接获取广州天气的任务。参考:免费天气API,天气JSON API,不限次数获取十五天的天气预报
登录进入任务管理页面新建任务
访问,http://127.0.0.1:8080/xxl-job-admin ,输入 admin/123456 。登录上面我们搭建成功的xxl-job的分布式调度系统。然后进入"任务管理" 页面,进行新建任务,

填写任务的基本信息
这里填写的是调度任务的基本信息,例如:任务失败的时候重试的次数,该任务的负责人、应该依赖的上一个任务id。
在弹出的新建任务的窗口,按照如下填写:
编辑任务的具体执行的内容
我们可以通过xxl-job 自带的 IDE 来编辑我们需要运行的shell脚本。
按照上面填写好任务的基本信息后,我们接着来编辑要执行的任务脚本,

启动任务并查询执行记录
点击保存,然后返回任务列表,启动该任务。然后就可以到"调度日志"页面,查看该任务的执行记录了,点击具体运行的某个实例的“查看日志”能看到该实例执行记录的详细日志信息。
总结
本篇文章介绍了分布式调度任务系统 xxl-job 的安装 和简单使用。其实整篇下来,我觉得挺水的;算作当做自己记录一下吧,这个分布式调度系统的,其实功能挺简单的,如果运行比较少的任务的会比较轻松和容易上手。不过如果要运行一些复杂的任务,特别是包含一些例如,按小时汇总到天 然后触发依赖 之类逻辑较多的依赖或者是想延迟执行、指定重跑某个数据时间的实例 等等复杂逻辑,就比较困难了。另外这个分布式开源的调度系统的任务实例界面和任务管理界面的交互并不是很好,都是展示成列表的形式。如果把任务实例界面修改为按照单元格日期 这样来选择会比较好些。因为我们公司也有类似这样的分布式调度系统,不过我们公司的由于业务比较复杂,所以我们的分布式调度任务系统的功能比较多,相对于 xxl-job 有一定优势,但是也有挺多缺点的。
总而言之,对于绝大部分中小公司的调度任务或者是比较简单的调度任务用xxl-job 是完全没有问题的。如果是要作为企业级系统来使用估计还需要基于 xxl-job 来修改挺多模块的。最后,还是挺感谢 xxl-job 能开源,对于我平常用来管理一下自己的调度任务也很不错。

最火的分布式调度系统 XXL-JOB 安装和简单使用的更多相关文章
- [转帖]单集群10万节点 走进腾讯云分布式调度系统VStation
单集群10万节点 走进腾讯云分布式调度系统VStation https://www.sohu.com/a/227223696_355140 2018-04-04 08:18 云计算并非无中生有的概念, ...
- 分布式监控系统Zabbix--完整安装记录(7)-使用percona监控MySQL
前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:分布式资源调度系统yarn的安装
实验目的 复习配置hadoop初始化环境 复习配置hdfs的配置文件 学会配置hadoop的配置文件 了解yarn的原理 实验原理 1.yarn是什么 前面安装好了hdfs文件系统,我们可以根据需求进 ...
- 分布式监控系统Zabbix--完整安装记录 -添加web页面监控
通过zabbix做web监控,不仅仅可以监控到站点的响应时间,还可以根据站点返回的状态码或响应时间做报警设置,比如说对某个url进行监控,当访问返回的状态码是非200状态时都报警(创建触发器即可).下 ...
- 分布式监控系统Zabbix-完整安装记录 -添加端口监控
对于进程和端口的监控,可以使用zabbix自带的key进行监控,只需要在server端维护就可以了,相比于nagios使用插件去监控的方式更为简单.下面简单介绍配置:监控端口zabbix监控端口使用如 ...
- 分布式监控系统Zabbix--完整安装记录 -添加apache监控
前面介绍了zabbix3.0.3环境及相关监控项的添加,下面介绍下针对apache的监控配置:1)在apache配置文件中打开server-status状态访问功能(自带的) [root@IDC-Ad ...
- 分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口
一.Zabbix-3.0.3批量添加主机的配置如下: 0)被监控机上要安装zabbix_agent,并配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_serve ...
- Mac OS X系统 HomeBrew的安装和简单使用
1. 前言 作为linux系统的忠实粉丝,我们都很喜欢 (Debian/Ubuntu)系列的apt包管理系统和(Redhat/Fedora)系列的yum包管理系统. 包括Windows用户都有多种方便 ...
- 分布式任务调度系统xxl-job源码探究(一、客户端)
前面讲了xxl-job的搭建,现在来粗略的解析下该分布式调度系统的源码,先来客户点代码 客户端源码 客户端开启的时候会向服务中心进行注册,其实现用的是jetty连接,且每隔半分钟会发送一次心跳,来告诉 ...
随机推荐
- jQuery 第十章 工具方法-高级方法 $.ajax() $.Callbacks() .....
$.ajax() $.Callbacks() $.Deferred() .then() $.when() ---------------------------------------------- ...
- 01-01.单一职责原则(Single Responsibility)
1.基本介绍 对于类来说的,就是一个类,应该只负责一项职责(一个类只管一件事). 如类A负责两个不同职责:职责1,职责2. 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解 ...
- 03_Service的绑定
Start Service启动的Service,Application退出,Service也不会退出: Bind Service启动的Service,Application退出,Service就会退出 ...
- bypass disable_function
windows 1.com组件绕过 <?php$command=$_POST['a'];$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.A ...
- Alpha冲刺-第二次冲刺笔记
Alpha冲刺-冲刺笔记 这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE2 这个作业要求在哪里 https://edu.cnblogs. ...
- java并发编程实战《一》可见性、原子性和有序性
可见性.原子性和有序性问题:并发编程Bug的源头 核心矛盾:CPU.IO.内存三者之间的速度差异. 为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构.操作系统.编译程序都做出了贡献 ...
- 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...
- ATT&CK 实战 - 红日安全 vulnstack (二) 环境部署(劝退水文)
靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ 靶场简述 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习.视频教程.博 ...
- 百度前端技术学院-基础-day22-24
第二十二天到第二十四天:JavaScript里面的居民们 task1 题目: <div> <label>Number A:<input id="radio-a& ...
- CF500G / T148321 走廊巡逻
题目链接 这题是 Codeforces Goodbye 2014 的最后一题 CF500G,只是去掉了 \(u \not= x, v \not = v\) 的条件. 官方题解感觉有很多东西说的迷迷瞪瞪 ...