xueli.xue 8 лет назад
Родитель
Сommit
485c25a856
1 измененных файлов: 46 добавлений и 48 удалений
  1. 46 48
      README.md

+ 46 - 48
README.md Просмотреть файл

64
 	- 20、博莹科技(上海)有限公司
64
 	- 20、博莹科技(上海)有限公司
65
 	- 21、成都依能股份有限责任公司
65
 	- 21、成都依能股份有限责任公司
66
 	- 22、湖南高阳通联信息技术有限公司
66
 	- 22、湖南高阳通联信息技术有限公司
67
+	- 23、深圳市邦德文化发展有限公司
67
 	- ……
68
 	- ……
68
 
69
 
69
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
70
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
98
 
99
 
99
 #### Download: 历史Release版本下载位置如下图所示,请自行前往进行选择和下载。
100
 #### Download: 历史Release版本下载位置如下图所示,请自行前往进行选择和下载。
100
 
101
 
101
-![输入图片说明](https://static.oschina.net/uploads/img/201705/08194456_PQTn.png "在这里输入图片标题")
102
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11214119_80Ma.png "在这里输入图片标题")
102
 
103
 
103
 ### 1.5 环境
104
 ### 1.5 环境
104
 - JDK:1.7+
105
 - JDK:1.7+
112
 ## 二、快速入门
113
 ## 二、快速入门
113
 
114
 
114
 ### 2.1 初始化“调度数据库”
115
 ### 2.1 初始化“调度数据库”
115
-请下载项目源码并解压,获取 "调度数据库初始化SQL脚本"(脚本文件为: 源码解压根目录\xxl-job\db\tables_xxl_job.sql) 并执行即可。正常情况下,应该生成如下图所示16张表;
116
+请下载项目源码并解压,获取 "调度数据库初始化SQL脚本"(脚本文件为: 源码解压根目录\xxl-job\db\tables_xxl_job.sql) 并执行即可。正常情况下,应该生成16张表;
116
 
117
 
117
-![输入图片说明](https://static.oschina.net/uploads/img/201703/10181507_8psZ.png "在这里输入图片标题")
118
+调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;
118
 
119
 
119
-调度中心集群情况下,集群节点务必连接同一个mysql实例;如果mysql做主从,调度中心集群节点务必强制走主库;
120
+如果mysql做主从,调度中心集群节点务必强制走主库;
120
 
121
 
121
 ### 2.2 编译源码
122
 ### 2.2 编译源码
122
 解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下图所示:
123
 解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下图所示:
123
 
124
 
124
-![输入图片说明](https://static.oschina.net/uploads/img/201607/23222522_JGCc.png "在这里输入图片标题")
125
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11214348_aGgr.png "在这里输入图片标题")
125
 
126
 
126
-    - xxl-job-admin:调度中心
127
-    - xxl-job-core:公共依赖
128
-    - xxl-job-executor-example:执行器(可直接使用该执行器,也可以将现有项目改造成执行器使用)
127
+    xxl-job-admin:调度中心
128
+    xxl-job-core:公共依赖
129
+    xxl-job-executor-example:执行器Example(可直接使用执行器Example,也可以将现有项目改造成执行器使用)
130
+    xxl-job-executor-springboot-example:执行器Example,springboot版本
129
 
131
 
130
 ### 2.3 配置部署“调度中心”
132
 ### 2.3 配置部署“调度中心”
131
 
133
 
135
 #### 调度中心配置:
137
 #### 调度中心配置:
136
 配置文件以及配置属性如下图所示。
138
 配置文件以及配置属性如下图所示。
137
 
139
 
138
-![输入图片说明](https://static.oschina.net/uploads/img/201703/10172754_5DUl.png "在这里输入图片标题")
139
-    
140
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11214752_Ifvp.png "在这里输入图片标题")
141
+
142
+
140
     ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
143
     ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
141
     xxl.job.db.driverClass=com.mysql.jdbc.Driver
144
     xxl.job.db.driverClass=com.mysql.jdbc.Driver
142
     xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
145
     xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
143
     xxl.job.db.user=root
146
     xxl.job.db.user=root
144
     xxl.job.db.password=root_pwd
147
     xxl.job.db.password=root_pwd
145
     
148
     
146
-    ### “调度中心”任务回调服务地址:“执行器”将会回调该地址通知任务执行结果,改地址将会用于回调服务注册。回调服务默认端口为8888,回调IP默认为空表示自动获取IP,多网卡时可手动设置指定IP;
147
-    xxl.job.callBackIp=
148
-    xxl.job.callBackPort=8888
149
-    
150
     ### 报警邮箱
149
     ### 报警邮箱
151
     xxl.job.mail.host=smtp.163.com
150
     xxl.job.mail.host=smtp.163.com
152
     xxl.job.mail.port=25
151
     xxl.job.mail.port=25
175
 #### 执行器配置:
174
 #### 执行器配置:
176
 配置文件以及配置属性如下图所示。
175
 配置文件以及配置属性如下图所示。
177
 
176
 
178
-![输入图片说明](https://static.oschina.net/uploads/img/201705/02182818_WeyS.png "在这里输入图片标题")
177
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11214800_7G3o.png "在这里输入图片标题")
179
 
178
 
180
 
179
 
181
-    ### xxl-job db:执行器JDBC链接:请保持和调度中心JDBC连接配置一致;(执行器 "DbRegistHelper" 依赖JDBC配置;推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置; )
182
-    xxl.job.db.driverClass=com.mysql.jdbc.Driver
183
-    xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
184
-    xxl.job.db.user=root
185
-    xxl.job.db.password=root_pwd
180
+    ### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"。
181
+    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
186
     
182
     
187
-    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName为执行器分组依据。“调度中心”将会请求该地址触发任务,改地址将会用于执行器注册。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP;
183
+    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP;
188
     xxl.job.executor.appname=xxl-job-executor-example
184
     xxl.job.executor.appname=xxl-job-executor-example
189
     xxl.job.executor.ip=
185
     xxl.job.executor.ip=
190
     xxl.job.executor.port=9999
186
     xxl.job.executor.port=9999
196
 #### 组件配置:
192
 #### 组件配置:
197
 配置内容如下图所示。
193
 配置内容如下图所示。
198
 
194
 
199
-![输入图片说明](https://static.oschina.net/uploads/img/201704/27204724_WW5m.png "在这里输入图片标题")
195
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11220120_vZXB.png "在这里输入图片标题")
200
 
196
 
201
     1、JobHandler 扫描路径:自动扫描容器中JobHandler;
197
     1、JobHandler 扫描路径:自动扫描容器中JobHandler;
202
-    2、执行器注册器(XxlJobExecutor.registHelper): 默认使用系统提供的 "DbRegistHelper"(依赖JDBC), 推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置; )
203
-    3、XXL-JOB公共数据源 "xxlJobDataSource": 仅在启动 "DbRegistHelper" 或 "DbGlueLoader" 时才需要, 否则可删除
198
+    2、执行器注册器:执行器核心配置;
204
 
199
 
205
 #### 部署项目:
200
 #### 部署项目:
206
 至此“执行器”项目已经部署结束。
201
 至此“执行器”项目已经部署结束。
541
 ```
536
 ```
542
 
537
 
543
 ##### 5.4.7 日志回调服务
538
 ##### 5.4.7 日志回调服务
544
-调度模块的“调度中心”作为Web服务单独部署,除此之外,内部嵌入jetty服务器提供日志回调服务。
539
+调度模块的“调度中心”作为Web服务部署时,一方面承担调度中心功能,另一方面页为执行器提供API服务。
545
 
540
 
546
-“执行器”在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知“调度中心”,回调端口如下图所示(参数:xxl.job.callBackPort)。
541
+调度中心提供的"日志回调服务API服务"代码位置如下:
542
+```
543
+xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
544
+```
547
 
545
 
548
-![输入图片说明](https://static.oschina.net/uploads/img/201703/10172754_5DUl.png "在这里输入图片标题")
546
+“执行器”在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知“调度中心”,代码位置为:
549
 
547
 
550
 ##### 5.4.8 任务HA(Failover)
548
 ##### 5.4.8 任务HA(Failover)
551
 执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。
549
 执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。
552
 
550
 
553
 当任务"路由策略"选择"故障转移(FAILOVER)"时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。
551
 当任务"路由策略"选择"故障转移(FAILOVER)"时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。
554
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12230049_EBkr.png "在这里输入图片标题")
552
+![输入图片说明](https://static.oschina.net/uploads/img/201705/11221144_P128.png "在这里输入图片标题")
555
 
553
 
556
 调度成功后,可在日志监控界面查看“调度备注”,如下;
554
 调度成功后,可在日志监控界面查看“调度备注”,如下;
557
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12230733_jrdI.png "在这里输入图片标题")
555
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12230733_jrdI.png "在这里输入图片标题")
591
 
589
 
592
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
590
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
593
 
591
 
594
-#### 5.5 执行模块剖析
595
-##### 5.5.1 Bean模式任务
596
-开发步骤:见章节三
592
+#### 5.5 任务 "运行模式" 剖析
593
+##### 5.5.1 "Bean模式" 任务
594
+开发步骤:可参考 "章节三" 
597
 原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHander(value="名称")”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
595
 原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHander(value="名称")”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
598
 
596
 
599
-##### 5.5.2 GLUE模式任务
600
-开发步骤:见章节三;
601
-原理:每个Glue任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
597
+##### 5.5.2 "GLUE模式(Java)" 任务
598
+开发步骤:可参考 "章节三" ;
599
+原理:每个 "GLUE模式(Java)" 任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
600
+
601
+#### 5.5.3 GLUE模式(Shell) + GLUE模式(Python)
602
+开发步骤:可参考 "章节三" ;
603
+原理:脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且实时将脚本输出日志写到任务日志文件中,从而在调度中心可以实时监控脚本运行情况;脚本返回码为0时表示执行成功,其他标示执行失败。
602
 
604
 
603
-##### 5.5.3 执行器
605
+目前支持的脚本类型如下:
606
+
607
+    - shell脚本:任务运行模式选择为 "GLUE模式(Shell)"时支持 "shell" 脚本任务;
608
+    - python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "python" 脚本任务;
609
+    
610
+
611
+##### 5.5.4 执行器
604
 执行器实际上是一个内嵌的Jetty服务器,默认端口9999,如下图配置文件所示(参数:xxl.job.executor.port)。
612
 执行器实际上是一个内嵌的Jetty服务器,默认端口9999,如下图配置文件所示(参数:xxl.job.executor.port)。
605
 
613
 
606
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
614
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
609
 
617
 
610
 “执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
618
 “执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
611
 
619
 
612
-##### 5.5.4 任务日志
620
+##### 5.5.5 任务日志
613
 XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 "XxlJobLogger.log" 打印执行日志,“调度中心”查看执行日志时将会加载对应的日志文件。
621
 XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 "XxlJobLogger.log" 打印执行日志,“调度中心”查看执行日志时将会加载对应的日志文件。
614
 
622
 
615
 (历史版本通过重写LOG4J的Appender实现,存在依赖限制,该方式在新版本已经被抛弃)
623
 (历史版本通过重写LOG4J的Appender实现,存在依赖限制,该方式在新版本已经被抛弃)
623
 ##### 5.6.1 一次完整的任务调度通讯流程 
631
 ##### 5.6.1 一次完整的任务调度通讯流程 
624
     - 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
632
     - 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
625
     - 2、“执行器”执行任务逻辑;
633
     - 2、“执行器”执行任务逻辑;
626
-    - 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,实际上是一台内嵌jetty服务器,默认端口8888;
634
+    - 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
627
 
635
 
628
 ##### 5.6.2 通讯数据加密
636
 ##### 5.6.2 通讯数据加密
629
-调度中心与执行器之间使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化字节数组,最终转化成16进制数据进行数据交互,从而达到数据加密的功能;
637
+调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
630
 
638
 
631
 #### 5.7 任务注册, 任务自动发现   
639
 #### 5.7 任务注册, 任务自动发现   
632
 自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
640
 自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
654
 当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
662
 当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
655
 从而,在任务逻辑中可以方便的控制任务执行结果;
663
 从而,在任务逻辑中可以方便的控制任务执行结果;
656
 
664
 
657
-#### 5.10 脚本任务
658
-目前支持的脚本类型如下,脚本任务可参考章节 "三、任务详解":
659
-
660
-    - shell脚本:任务运行模式选择为 "GLUE模式(Shell)"时支持 "shell" 脚本任务;
661
-    - python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "python" 脚本任务;
662
-    
663
-脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;
664
-并且实时将脚本输出日志写到任务日志文件中,从而在调度中心可以实时监控脚本运行情况;
665
-
666
-脚本返回码为0时表示执行成功,其他标示执行失败。
667
 
665
 
668
 ## 六、版本更新日志
666
 ## 六、版本更新日志
669
 #### 6.1 版本 V1.1.x,新特性[2015-12-05]
667
 #### 6.1 版本 V1.1.x,新特性[2015-12-05]