Parse Platform任务调度

收起来也挺奇怪的,Parse Platform本身基于js实现,Node生态里的任务调度实现起来并不麻烦,Parse却选择了不集成,使用第三方提供的任务调度。这里使用node-cron来实现Parse Server中的Job调度。

一、Cloud Code定义Job

Parse.Cloud.job("test", async (request) =>  {
    // params: passed in the job call
    // headers: from the request that triggered the job
    // log: the ParseServer logger passed in the request
    // message: a function to update the status message of the job object
    const { message } = request
    message('done')
})

二、定义一个调用Job的函数,方便后面使用

async function callParseJob(parseServerUrl: string, name: string, data?: any) {
  console.log(`node-cron: callParseJob ${name}`)
  const options: RequestInit = {
    method: 'POST',
    headers: {
      'X-Parse-Application-Id': process.env.APP_ID ?? '',
      'X-Parse-Master-Key': process.env.MASTER_KEY ?? ''
    }
  }
  if (data != null) {
    options.body = JSON.stringify(data)
  }
  const res = await fetch(`${parseServerUrl}/jobs/${name}`, options)
  console.log(`node-cron: job ${name} finished, ${res.statusText}`)
  return await res.json()
}

三、使用node-cron调度Job

这里选择通过单独的进程来运行调度程序

if (cluster.isPrimary) { cron.schedule(‘* * * * *’, async () => await callParseJob(process.env.SERVER_URL ?? ”, ‘test’)) cluster.fork() // 根据cpu个数fork子进程 cluster.on(‘exit’, function(worker, code, signal) { console.log(‘worker ‘ + worker.process.pid + ‘ exited’) cluster.fork() //新建一个worker }) } else { const app = express() //…启动Server相关的代码,这里省略 }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注