Created
June 30, 2016 09:43
-
-
Save stableShip/ddf9bfbacf28e179b02f6283313c92ba to your computer and use it in GitHub Desktop.
第三方定时任务概要设计文档
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##第三方定时任务概要设计文档 | |
### 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