voko-worker-main.js 1.02 KB
/**
 * `voko-worker` 进程入口:领取并执行 vk_jobs(W2 起实现)。骨架阶段只做心跳,证明进程可被 PM2 托管。
 */

import { createRuntime } from './assembly/runtime.js'

const TICK_MS = 2000
const HEARTBEAT_EVERY_TICKS = 30

const runtime = await createRuntime({ service: '@voko/worker' })
let ticks = 0
let stopping = false

async function tick() {
  // W2:在这里用 FOR UPDATE SKIP LOCKED 领取到期 job(见 SDD「定时任务与事件」)。
  await runtime.services.db.raw('select 1')
  ticks += 1
  if (ticks % HEARTBEAT_EVERY_TICKS === 0) runtime.logger.info('worker 心跳', { ticks })
}

async function loop() {
  while (!stopping) {
    await tick()
    await new Promise((resolve) => setTimeout(resolve, TICK_MS))
  }
  await runtime.close()
}

runtime.logger.info('worker 已启动', { tick_ms: TICK_MS })
process.once('SIGINT', () => { stopping = true })
process.once('SIGTERM', () => { stopping = true })
loop().catch((err) => {
  console.error('voko-worker crashed:', err)
  process.exit(1)
})