系统事件(System Event)

传统的分布式系统通常会在一些主机上通过系统的Cron服务来跑一些定时任务。这类任务从逻辑上和事件很接近, 不同之处在于事件并不由某端用户代码出发,而是通过给系统一个控制命令后,由系统触发。我们把这一类事件 称作System Event。Bucky目前支持的系统事件有两种: 系统定时器(System Timer)和系统任务(System Task)。

系统定时器(System Timer)

一个系统定时器的能力是定时执行指定XARPackage的指定接口。系统定时器的使用很简单:

  1. 创建一个XARPackage,导出需要定时执行的接口
  2. 在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的指定接口。系统任务的使用很简单:

  1. 创建一个XARPackage,导出需要定时执行的接口
  2. 在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规范:

results matching ""

    No results matching ""