系统事件(System Event)
传统的分布式系统通常会在一些主机上通过系统的Cron服务来跑一些定时任务。这类任务从逻辑上和事件很接近, 不同之处在于事件并不由某端用户代码出发,而是通过给系统一个控制命令后,由系统触发。我们把这一类事件 称作System Event。Bucky目前支持的系统事件有两种: 系统定时器(System Timer)和系统任务(System Task)。
系统定时器(System Timer)
一个系统定时器的能力是定时执行指定XARPackage的指定接口。系统定时器的使用很简单:
- 创建一个XARPackage,导出需要定时执行的接口
- 在kowledges.json里配置"system.timer"字段
其中,在konwledges.json里配置一个系统定时器system.timers如下:
{
...
"system.timers": {
"type": 0,
"object": {
// 以key-value配置多个systemtimer
"example-system-timer-name": {
// 配置要定时调用的函数
"exec": {
// 函数全称,格式是
// xarpackagename:modulename::functionname
"function": "example-xar-package-name:example-xar-module::onTimer",
// 函数参数
"args": [],
// 用以selectruntime的packageInfo,
// 如果没有指定,那么直接在当前runtime运行timer
"package" : {
// 必选字段
"package_id" : "",
"runtime_type" : "",
// 可选字段
"ability" : [],
"drivers" : [],
"storages" : [],
"tags" : [],
},
// 参考CallChain一节的介绍,
"cc": {}
},
// 定时器执行的间隔,最低时间间隔为1s
"interval": 30000,
// 选项,目前只有一个'immediate',
// 代表是否先执行一次再定时等待
"options": [
"immediate"
],
// 是否被禁止执行,可以通过bucky的工具动态修改该值
"disable" : true/false,
},
}
}
...
}
则在应用程序构建并启动后,bucky会根据上述Knowledge配置动态触发应用程序的系统定时器。例如实现一个应用程序内的积分系统,实现一个复式记账模块,则在事务(Transaction)的实现里,就可以使用System Timer来驱动Undo/Redo逻辑的实现。
系统任务(System Task)
一个系统任务的能力是在根据unix的Cron规则,在匹配的时间点执行指定XARPackage的指定接口。系统任务的使用很简单:
- 创建一个XARPackage,导出需要定时执行的接口
- 在kowledges.json里配置"system.task"字段
其中,在konwledges.json里配置一个系统任务示例如下:
{
...
"system.tasks" : {
"type" : 0,
"object" : {
// 以key-value配置多个systemtask
"test1" : {
"exec" : {
// 函数全称,格式是
// xarpackagename:modulename::functionname
"function" : "calculater:calculater::onSystemTask",
// 函数参数
"args" : [],
// 参考CallChain一节的介绍,
"cc" : {}
},
"cronexp" : "* * * * *"
}
}
}
...
}
其中cronexp遵守unix的Cron规范: