普元 EOS定时任务实现原理
转至元数据起始
普元平台的定时任务能力是通过开源的作业调度框架Quartz实现的。
一、定时任务的基本概念:
- 调度器:负责管理Quartz应用运行时环境,用于调度定时任务。
- 定时任务:按照某种时间规则,被调度的任务。
a、从有无状态来说,有以下两种:
有状态任务:每次执行的任务是同一个实例,不能被并行执行;如果该任务的执行时间超过下次触发的时刻,那么下次的触发将不会有作用。比如,一个有状态任务执行时间是5分钟,它的间隔时间是3分钟;如果正在执行的时候,下次触发时刻到达,则不会被执行。
无状态任务:每次执行任务都是一个新的实例,可以并行执行。
b、从执行的任务类型来说,有以下三种:
SCA服务任务:任务是一个SCA服务。
逻辑流任务:任务是一个逻辑流。
任意Java方法任务:任务是一个Java方法。
c、触发模式(触发器):用于定义任务调度的时间规则,主要有下面两种:
固定时刻触发(简单触发器):一般用于实现间隔固定的时间执行任务,以及重复多少次,如每 2 小时执行一次,重复执行 5 次。
日历周期触发(复杂触发器):使用Unix 'cron-like'表达式来定义时间规则,即利用一个包含 7 个字段的表达式来表示时间调度方式。例如,"0 15 10 * * ? *" 表示每天的 10:15AM 执行任务。对于涉及到星期和月份的调度比较合适。
d、错失触发:定时任务如果错过触发而没有执行,比如系统停止;系统重启后,就会针对错失触发的定时任务进行处理,一般有两种错失触发策略(EOS_QRTZ_TRIGGERS表的MISFIRE_INSTR字段):
立即重新触发:默认策略,立即执行一次定时任务,而不管错过几次。MISFIRE_INSTR字段值为1。
错过触发:下次触发时间到来,再触发执行定时任务。MISFIRE_INSTR字段值为2。
定时任务配置界面如下:
二、定时任务实现的基本原理:
- 单机模式
调度器启动一个调度线程,根据触发器进行轮询,如果触发时刻到达,分配一个执行线程,执行定时任务。其中调度器及其状态、触发器及其状态、定时任务及其状态信息都会持久化到数据库中,所以系统停止,不会丢失定时任务;系统重新启动,会重新定时触发。
- 集群模式
定时任务的集群,有负载均衡和故障切换的能力,可以给调度器带来高可用性和伸缩性。集群管理的实现是,集群上的每一个节点通过共享同一个数据库来工作的(Quartz通过启动两个维护线程来维护数据库状态实现集群管理,一个是检测节点状态线程,一个是恢复任务线程),通过数据库锁来实现并发控制(如果不是集群,使用内存锁进行并发控制)。下图是集群模式拓扑图:
负载均衡是自动完成的,集群的每个节点会尽快触发任务。当一个触发器的触发时间到达时,第一个节点将会获得任务,并改变任务状态,成为执行任务的节点。
故障切换的发生是在当一个节点正在执行一个或者多个任务失败的时候。当一个节点失败了,其他的节点会检测到并且标识在失败节点上正在进行的数据库中的任务。任何被标记为可恢复的任务都会被其他的节点重新执行。没有标记可恢复的任务只会被释放出来,将会在下次相关触发器触发时执行。
- 注意:
如果是集群模式,则要求每个节点的时钟一定要一致,否则将发生无法预料的问题。
根据经验,建议简单触发器的间隔时间不要小于20秒。
普元 EOS定时任务实现原理相关推荐
- 普元EOS开发积累第一篇(常见错误解决方法) 持续更新
普元EOS开发积累第一篇(常见错误解决方法) 持续更新 参考文章: (1)普元EOS开发积累第一篇(常见错误解决方法) 持续更新 (2)https://www.cnblogs.com/tangjing ...
- 普元 EOS Platform 7.6 集群部署在BES9.5.2.4692,重启集群节点偶发报错:java.util.ConcurrentModificationException
[问题描述] 普元EOS Platform 7.6 集群部署在BES9.5.2.4692,重启集群节点偶发报错: [com.primeton.runtime.resource.impl.Contrib ...
- 普元EOS RichWeb(富客户端)实践总结
最近公司未来一银行项目要使用到普元的EOS,客服是普元合作机构,没办法,必须将系统在EOS平台上部署开发,认真学习了2个星期,对EOS6.0的印象还是非常的好.丰富的页面开发组件,SOA我不是特别特别 ...
- 普元eos开发手册_名词解释--统一应用(开发)平台Unified Application Platform
国内有些企业项目开发当中,可能会遇到UAP的概念,UAP指的是Unified Application Platform,即统一应用平台. UAP,简单的理解,就是公司层面,统一的技术平台,涉及整个公司 ...
- 普元EOS/BPS为什么没有安装成功 ?
原文连接 在实际的Platform/BPS的产品安装使用中,经常会遇到安装不成功的场景,运行版不成功多于开发版,运行版中集群安装不成功又多于单机版.手工部署安装问题也会多于安装介质的安装.下面说明一下 ...
- 普元eos使用svn_普元DevOps介绍
普元DevOps是通过工具链与集成.发布.反馈与优化进行端到端整合,完成无缝的跨团队.跨系统协作.其目标是建立开发与运维之间的桥梁,履行开发运维协作.自动化.基础设施即代码.持续集成.持续测试.持续发 ...
- 普元 EOS Platform 7.6适配人大金仓v8
先说下普元7.6,普元7.6最大支持编译JDK1.7.然后在它默认的数据源里,最大支持人大金仓V7. 实际使用中,可以使用JDK1.8,也可以连接人大金仓V8. 人大金仓V8记得朝人大金仓要jar包( ...
- 普元EOS之我要配置数据源或更换数据库
阅读原文 用户在使用普元产品的时候,有时候会根据业务需要,要配置数据源或更换数据库连接,分为开发版的更换和运行环境的更换. 1. 数据源概述 普元SOA产品中提到的数据源,分为两种, C3P0数据源和 ...
- 普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...
1 创建项目 1) 进入EOS Studio开发透视图: 单击主菜单项"文件"选择"新建"->"空EOS项目 2) 在弹出的"创 ...
最新文章
- 英特尔宣布全新自动驾驶平台整合处理器和视觉芯片
- python有序队列_【python】collections模块(有序字典,计数器,双向队列)
- 无偏PU learning简介
- SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群... 1
- 基于Qt的P2P局域网聊天及文件传送软件设计
- 【mac】iTerm2中ssh保持连接不断开
- 2021 年高教社杯全国大学生数学建模竞赛题目(C 题 生产企业原材料的订购与运输)
- MATLAB读取和写入Excel文件
- Linux下更换jdk和配置环境变量
- 一元线性回归(Linear Regression)
- RabbitMQ 菜鸟教程
- Premiere 五套特效转场插件合集 FilmImpact Transition Packs V3.6.11
- eclipse安装程序没反应
- MATLAB复数相关运用
- MFC程序阻止别的软件隐藏窗口,或拦截WM_SHOWWINDOW消息
- Linux的一些基础命令
- Icarus Verilog
- vue导出excel乱码(锟斤拷唷?锟?;锟斤拷)
- 标签云打印/微信小程序蓝牙标签打印开放平台功能
- PHP 观察者模式 理解
热门文章
- 毕业设计 基于JavaWbe的校友录管理网站的设计与实现
- hasp运行不成功_条码打印软件安装提示HASP错误代码处理方法
- amcharts _ 2.7.6 实现动态数据展现
- Android手机4G网络设置ipv6
- Java多线程——计算1-20阶乘和
- Python之禅 -- 致初学者
- Springboot+vue+java企业员工绩效考核管理系统
- 电脑显示IP地址错误怎么办|电脑无法上网提示IP地址错误的解决方法
- 田园风光别样滋味——郧西县河夹镇龙窝村首届山野葡萄采摘节
- 如何制作天堂2免导版天堂2单机服务端