Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save stableShip/ddf9bfbacf28e179b02f6283313c92ba to your computer and use it in GitHub Desktop.
Save stableShip/ddf9bfbacf28e179b02f6283313c92ba to your computer and use it in GitHub Desktop.
第三方定时任务概要设计文档
##第三方定时任务概要设计文档
### 1. 定义
第三方定时任务: 定时运行第三方接入任务,同步第三方与平台数据。
### 2. 需求
每天定时运行第三方接入任务,与第三方同步数据。 可以监控到任务运行状态: (运行社区, 定时运行时间, 调用类, 调用方法, 描述, 状态 ), 开启或关闭任务。
### 3. 方案
#### 3.1 方案一
定时任务队列: 新建mongo数据库表,添加 社区, 运行任务描述, 任务调用类, 任务调用方法,状态 等任务相关设置,组成任务队列。
当服务器启动时,从数据库中读取出整个队列,使用node-schedule模块,为每个任务定义一个定时器, 到点自动运行。
**优点**: 使用node-schedule模块直接定义了任务的运行, 不需要再自己解析定时任务的运行时间,逻辑简单。
**缺点**:使用node-schedule定义多个任务,耗费资源可能较多
#### 3.2 方案二
定时任务队列: 新建mongo数据库表,添加 社区, 运行任务描述, 任务调用类, 任务调用方法,状态 等任务相关设置,组成任务队列。
当服务器启动时,使用node-schedule模块启动一个定时任务,每一分钟或每五分钟, 检测某个任务是否应当执行。
**优点**: 只有一个定时器
**缺点**:需要自己写一个任务执行管理器,来判断任务是否需要执行,该管理器逻辑可能比较复杂。nodejs底层对settimeout的优化,也是实现了一个队列,每次事件循环时对队列进行检测,自己写有点画蛇添足的感觉。
参考资料:http://www.cnblogs.com/kongxianghai/p/3942226.html
###4. 边界条件
###5. 问题
#### 5.1. 定时任务执行能不能中途中断?
答:无法中断
#### 5.2. 服务器崩溃, 定时任务会怎样?
答: 运行中的定时任务停止, 服务器重新启动后,重新注册定时任务,下次到达运行时间,再次运行。可将定时任务独立出来作为一个单独的服务使用
### 6. 定时任务结构定义
|社区id| 任务名称| 描述 |定时运行规则| 调用类| 调用方法| 状态|
|-|
|community_id| name| desc| recurrenceRule| invokeClass |invokeMethod |status|
|ObjectId| String| String |mixed |String| String| Number|
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment