xxl-job学习,基本测试1
xxl-job
- 写在前面
- 特别注意
- 一、环境搭建
- 1.1、部署
- 1.2、基于注册中心,自定义项目中引入xxl-job
- 二、搭建完成,测试任务参数,执行机制等
- 2.1、页面配置任务,包括启动条件
- 2.1.1、执行器管理 > 新增执行器
- 2.1.2、任务管理>新增任务
- 三、监控和日志
写在前面
xxl-job是大众点评研发工程师许雪里,开源的任务调度系统,提供页面化操作,用于任务注册、发布、管理、监控、日志,以及集群环境中任务路由机制等等…详细可参照xxl官网介绍,这里只是记录一下学习过程,以及收获…
特别注意
参考学习时,一定要注意版本的区别…
后续版本,对任务定义,注册,进行了优化
我这里是 2.1.2 版本,就优化如下
方法任务支持:由原来基于JobHandler类任务开发方式,优化为支持基于方法的任务开发方式;因此,可以支持单个类中开发多个任务方法,进行类复用
一、环境搭建
1.1、部署
找到xxl-job,稳定版本,部署,或者本地启动测试,当作任务的注册中心,
设计基于Mysql存储的相关任务参数
这里贴一下,相关架构和配置
配置文件
1.2、基于注册中心,自定义项目中引入xxl-job
测试基本架构
配置文件
# web port
server.port=8081# log config
logging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin### xxl-job executor address
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999### xxl-job, access token
xxl.job.accessToken=### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=30
参数简介
// 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin// 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample// 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=// 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999// 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=// 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler// 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
任务定义如下,官网示例中定义了四种参考使用方式
/*** XxlJob开发示例(Bean模式)** 开发步骤:* 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"* 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。* 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;** @author xuxueli 2019-12-11 21:52:51*/
@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public ReturnT<String> demoJobHandler(String param) throws Exception {XxlJobLogger.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {XxlJobLogger.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}return ReturnT.SUCCESS;}/*** 2、分片广播任务*/@XxlJob("shardingJobHandler")public ReturnT<String> shardingJobHandler(String param) throws Exception {// 分片参数ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());// 业务逻辑for (int i = 0; i < shardingVO.getTotal(); i++) {if (i == shardingVO.getIndex()) {XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);} else {XxlJobLogger.log("第 {} 片, 忽略", i);}}return ReturnT.SUCCESS;}/*** 3、命令行任务*/@XxlJob("commandJobHandler")public ReturnT<String> commandJobHandler(String param) throws Exception {String command = param;int exitValue = -1;BufferedReader bufferedReader = null;try {// command processProcess process = Runtime.getRuntime().exec(command);BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));// command logString line;while ((line = bufferedReader.readLine()) != null) {XxlJobLogger.log(line);}// command exitprocess.waitFor();exitValue = process.exitValue();} catch (Exception e) {XxlJobLogger.log(e);} finally {if (bufferedReader != null) {bufferedReader.close();}}if (exitValue == 0) {return IJobHandler.SUCCESS;} else {return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value("+exitValue+") is failed");}}/*** 4、跨平台Http任务*/@XxlJob("httpJobHandler")public ReturnT<String> httpJobHandler(String param) throws Exception {// requestHttpURLConnection connection = null;BufferedReader bufferedReader = null;try {// connectionURL realUrl = new URL(param);connection = (HttpURLConnection) realUrl.openConnection();// connection settingconnection.setRequestMethod("GET");connection.setDoOutput(true);connection.setDoInput(true);connection.setUseCaches(false);connection.setReadTimeout(5 * 1000);connection.setConnectTimeout(3 * 1000);connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");// do connectionconnection.connect();//Map<String, List<String>> map = connection.getHeaderFields();// valid StatusCodeint statusCode = connection.getResponseCode();if (statusCode != 200) {throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");}// resultbufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));StringBuilder result = new StringBuilder();String line;while ((line = bufferedReader.readLine()) != null) {result.append(line);}String responseMsg = result.toString();XxlJobLogger.log(responseMsg);return ReturnT.SUCCESS;} catch (Exception e) {XxlJobLogger.log(e);return ReturnT.FAIL;} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (connection != null) {connection.disconnect();}} catch (Exception e2) {XxlJobLogger.log(e2);}}}/*** 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;*/@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")public ReturnT<String> demoJobHandler2(String param) throws Exception {XxlJobLogger.log("XXL-JOB, Hello World.");return ReturnT.SUCCESS;}public void init(){logger.info("init");}public void destroy(){logger.info("destory");}}
二、搭建完成,测试任务参数,执行机制等
2.1、页面配置任务,包括启动条件
2.1.1、执行器管理 > 新增执行器
待 解决一
这里appName理应就是我们客户端里的自研项目的appName,如果填写正确,自动注册后,可自动找到 online 机器地址,如果乱写,自动注册是不能找到机器地址的,需要手动添加正确的机器地址,但这会影响任务执行吗?
待 解决二
单应用多点部署时,确保的单点执行机制
2.1.2、任务管理>新增任务
这里几个很重要的参数说明
执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 “执行器管理” 进行设置;
任务描述:任务的描述信息,便于任务管理;
路由策略:当执行器集群部署时,提供丰富的路由策略,包括;
FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;Cron:触发任务执行的Cron表达式;
运行模式:
BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 “JobHandler” 属性匹配执行器中任务;
GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 “groovy” 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;
GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “shell” 脚本;
GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “python” 脚本;
GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “php” 脚本;
GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “nodejs” 脚本;
GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 “PowerShell” 脚本;JobHandler:运行模式为 “BEAN模式” 时生效,对应执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值;
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;子任务:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。
任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔;
负责人:任务的负责人;
执行参数:任务执行所需的参数;
三、监控和日志
查看 运行报表和调度日志即可看到相关的监控、日志
xxl-job学习,基本测试1相关推荐
- DaoCloud Enterprise 5.0社区版永久免费!支持免费下载使用、学习和测试,体验企业级云原生底座的性能
一直专注搞云原生的公司DaoCloud(中文名:道客)最近发布了新一代云原生操作系统DaoCloud Enterprise 5.0,并同步推出了DaoCloud Enterprise 5.0社区版,看 ...
- Java项目:课程在线学习与测试系统(java+SSM+redis+Bootstrap+Tomcat+mysql)
源码获取:博客首页 "资源" 里下载! 基于B/S架构的课程在线学习与测试系统 启动说明 项目为maven管理,最近集成了redis,所以在运行项目是先要下载redis并启动客户端 ...
- 信息安全学习----渗透测试知识点
信息安全学习----渗透测试知识点 信息收集 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮 ...
- ORACLE中triggers灰色的,Oracle之Triggers学习与测试_20091229
Oracle Triggers学习与测试 <>P475 <>P567 目录 1 Introduction to Triggers 1.1 The events that fir ...
- 基于PHP+MySQL实现(Web)英语学习与测试平台【100010284】
数据库课设:英语学习与测试平台 运行环境要求 PHP7.1+ 基于 thinkPHP6.0.Layui.Xadmin 开发 主要功能 公共模块 登录注册 个人信息修改 密码修改 教师模块 文章查看发布 ...
- 什么是渗透测试?如何学习渗透测试?
渗透测试是网络安全体系中细分的就业方向之一,该岗位对实操经验.技术水平要求较高,必须通过专业的培训才可以满足企业用人需求.因此为了快速成为一名专业的渗透测试工程师,大部分人都会选择参加培训.那么什么是 ...
- java计算机毕业设计海南自贸港知识学习与测试MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计海南自贸港知识学习与测试MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计海南自贸港知识学习与测试MyBatis+系统+LW文档+源码+调试部署 本源码技术栈 ...
- java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...
- 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- [转载]学习让测试更精彩,测试让生命更精彩
其实,这篇文章的名字我想了很久,最终定了这样一个标题.很多人会觉得太大了吧,学习和测试有关系,测试和生命的关联貌似没有那么大吧.其实不然,这篇文章提到的一种态度,是一种思想,是一种精神.我认为是测试同 ...
最新文章
- linux nice值_linux系统管理之交互式企业站点(连载)
- 修改CentOS 7.2系统的主机名
- Leetcode--448. 找到所有数组中消失的数字
- 小微企业——客户借款原因分析
- mysql数据库原理及应用实训报告_《数据库原理及应用》实验报告.doc
- 线性回归分析步骤总结
- WorldFirst万里汇推出港币和离岸人民币账户!
- NATAPP vscode SSH远程连接Linux服务器出现couldn‘t establish connection
- TT 的旅行日记 Week7作业B题
- CIO谈:基于K2 BPM平台怎么做报销?
- 卷积神经网络在物联网场景中的应用初探
- 蓝桥杯:跳蚂蚱【BFS】【Python】
- 力扣每日一题(九——保持城市天际线)
- java web 下拉列表_web中下拉列表的几种实现
- 互联网公司最常见的面试算法题大集合!
- 树莓派python界面qt_树莓派QT入门教程——使用Qt开发界面程序控制GPIO
- anemometer mysql5.6_Anemometer 慢查询日志监控平台
- flink学习笔记(五)
- 人大金仓数据库的归档日志
- 56,选择怪call,普通攻击,释放技能call,自己数据