@ arkstack/ 工作
Arkstack 的工作模块,提供可调度的工作班和一个调度员 @arkstack/queue。 。 。 .
@arkstack/jobs 这是 撰写 层; @arkstack/queue 是运输工具。 这个包裹给你 Job 基类,该 dispatch() 帮助者,以及一个登记册 这样工人可以重建你的工作类别 从存储的有效载荷.
写作
ark make:job SendWelcomeEmail
// src/app/jobs/SendWelcomeEmail.ts
import { Job } from '@arkstack/jobs'
export class SendWelcomeEmail extends Job {
constructor(public userId: number) {
super()
}
async handle() {
// ... send the email
}
}
调度
import { dispatch } from '@arkstack/jobs'
import { SendWelcomeEmail } from '@app/jobs/SendWelcomeEmail'
// static helper
await SendWelcomeEmail.dispatch(user.id)
await SendWelcomeEmail.dispatch(user.id).onQueue('mail').withDelay(60)
await SendWelcomeEmail.dispatchSync(user.id) // run inline now
// functional helper
await dispatch(new SendWelcomeEmail(user.id))
await dispatch(new SendWelcomeEmail(user.id), { queue: 'mail', delay: 60 })
默认 sync 队列连接任务立即运行。 配置 a
database 或者说 redis 连接( 见 @arkstack/queue经营一个工人
背景中的进程任务 :
ark queue:work
设置
导入 @arkstack/jobs 任何连接队列(去)序列化的地方
自动。 用于明确的靴子钩(下至) @arkstack/database/setup:
import '@arkstack/jobs/setup'
重建如何运作
每个 Job 登记本身 JobRegistry 当建造。 当a
工人弹出有效载荷,登记簿重建实例(通过
并指定序列化 data 回到这里。 专职工人
进程中,确保您的工作模块被导入——或呼叫
JobRegistry.register(MyJob) ——所以名字在处理前就已经知道.
覆盖 serialize() 在一份定制有效载荷的工作.