lavi-schedule

1.3.6 • Public • Published

npm install lavi-schedule

##1、Schedule

指定周期调度(默认每秒执行),EventEmitter衍生对象

依赖 node-schedule

  let schedule = new Schedule({scheduleRule: '*/5 * * * * *'}) // 每5秒执行
  
  // 监听事件 process
  schedule.on('process', (self, time, next) => {
    console.log('do something !')
  })
  
  schedule.start()
  
  //每5秒打印一次
  // do something !

Cron-style Scheduling

The cron format consists of:

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

参考 node-schedule

方法

schedule.runOnce()

执行一次任务,不开启自动调度:

schedule.runOnce()

schedule.start()

开始定时调度任务:

schedule.start()

schedule.stop()

终止定时调度任务:

schedule.stop()

schedule.stopNext()

停止下一次定时调度任务,并终止调度任务:

schedule.stopNext()

schedule.nextInvocation

获取下一次调度任务的时间

schedule.nextInvocation

schedule.sendMessage(type, message)

发送消息,监听message事件可以获取消息

schedule.on('message', (msg) => {
  console.info(msg.message) // {type: SCHEDULE_MESSAGE_TYPE, datetime: Date, message: Object}
})
// print: message info

schedule.sendMessage(SCHEDULE_MESSAGE_TYPE.INFO, 'message info')

SCHEDULE_MESSAGE_TYPE 在 constants.js 进行定义:

const SCHEDULE_MESSAGE_TYPE = {
  INFO: 'INFO',
  WARNING: 'WARNING',
  ERROR: 'ERROR',
  DATA: 'DATA',
  START: 'START',
  END: 'END',
  SUCCESS: 'SUCCESS',
  DEBUG: 'DEBUG'
}

schedule.sendDataMessage(type, message)

发送数据消息消息

schedule.on('message', (msg) => {
  // msg = {type: SCHEDULE_MESSAGE_TYPE.DATA, datetime: Date, message: {dataType: 'json', data: 'json message'}}}
  if(msg.type === SCHEDULE_MESSAGE_TYPE.DATA) {
    if(msg.message.dataType === 'json') 
      console.info(JSON.stringify(msg.message.data)) 
  }
})
// print: {dataType: 'json', data: {data: 'json message'}}

schedule.sendDataMessage('json', {data: 'json message'})

##2、JsonJobSchedule

集成json-rules-engine规则引擎的周期性调度

constructor(rules, facts = [], options)

rules [], json对象数组

facts [], fact对象数组

options {scheduleRule // Cron-style Scheduling, callbackParams // 回调时的回传参数}

let rules = [{
      conditions: {
        any: [{
          all: [{
            fact: 'gameDuration',
            operator: 'equal',
            value: 40
          }, {
            fact: 'personalFoulCount',
            operator: 'greaterThanInclusive',
            value: 5
          }]
        }, {
          all: [{
            fact: 'gameDuration',
            operator: 'equal',
            value: 48
          }, {
            fact: 'personalFoulCount',
            operator: 'greaterThanInclusive',
            value: 6
          }]
        }]
      },
      event: {
        type: 'fouledOut',
        params: {
          message: 'Player has fouled out!'
        }
      }
    }]
    jsonJobSchedule = new JsonJobSchedule(rules, [], {scheduleRule: '*/5 * * * * *', callbackParams: 'callback params'})

    jsonJobSchedule.on('message', (msgObj) => {
      if (msgObj.type === Constants.SCHEDULE_MESSAGE_TYPE.DATA) console.log(msgObj.message.data)
      else console.log(msgObj.message)
    })

    jsonJobSchedule.runFacts = [{
      personalFoulCount: 6,
      gameDuration: 40
    }]
    jsonJobSchedule.start()

##3、JsonJobScheduleRAS

扩展JsonJobSchedule,实现对目标的 Retrieve And Send 模式数据处理,简化实现过程。 Retrieve:从数据源获取数据,继承SourceAdapter实现 Send:向目的发送数据,继承DestAdapter实现

// 每1秒执行,对目标targetId,从SourceAdapter获取数据,写入DestAdapter
jsonJobScheduleRAS = new JsonJobScheduleRAS(new SourceAdapter(), new DestAdapter(), ['targetId']
        , {scheduleRule: '*/1 * * * * *'})
jsonJobScheduleRAS.start()

SourceAdapter

数据源

// 构造数据获取API类
class MyApi {
  retrieveData (targetId) {
    // todo 获取数据
    return ['aaa', 'bbb']
  }
}

// 自定义类继承SourceAdapter
class MySourceAdapter extends SourceAdapter {
  retrieveData (params) {
    return this.options.adapter.retrieveData(params.targetId)
  }
}

let mySourceAdapter = new MySourceAdapter(new MyApi())

constructor (adapter, options)

构造器,传入获取数据的对象,和自定义参数

retrieveData (target, targetParams)

获取数据,可传入获取参数,例如:targetId

DestAdapter

// 构造数据获取API类
class MyApi {
  getTargetParams (target) {
    // todo 获取数据
    return {targetParams: 'some'}
  }
  
  sendData (targetData, targetParams) {
    // todo 发送数据
  }
}

// 自定义类继承SourceAdapter
class MyDestAdapter extends DestAdapter {
  getTargetParams (target) {
    return this.options.adapter.getTargetParams(target)
  }
  
  sendData (targetData, targetParams) {
    return this.options.adapter.sendData(targetData, targetParams)
  }
}

let myDestAdapter = new MyDestAdapter(new MyApi())

constructor (adapter, options)

构造器,传入获取数据的对象,和自定义参数

getTargetParams (target)

获取目标数据参数

sendData (targetData)

发送数据

Readme

Keywords

Package Sidebar

Install

npm i lavi-schedule

Weekly Downloads

2

Version

1.3.6

License

ISC

Unpacked Size

70.4 kB

Total Files

20

Last publish

Collaborators

  • ttxx