agenda item 包括哪些(定时任务唯一条件的用法)
agenda item 包括哪些(定时任务唯一条件的用法)image.png // 主要应用:改变订单状态 await this.agendaService.create(OrderState.DELIVERED { type: 'order' uniqueId: event.serviceOrder.id state: OrderState.DELIVERED }).unique({ 'data.type': 'order' 'data.uniqueId': event.serviceOrder.id }).schedule(new Date(event.serviceOrd
使用 Agenda 做定时任务时,agenda 是允许我们设定唯一任务,这个场景是我们有时可能需要随时改变这个定时任务的时间,来延迟或提前触发它。
示例如下:
一、定义任务 // 订单交付(服务完成)
await this.agendaService.define(Orderstate.DELIVERED async (job) => {
const { uniqueId state } = job.attrs.data;
await this.userOrderService.internalTransitionToState(uniqueId state);
});
我们 define 了一个定时交付状态改变的任务
二、建立索引 await this.agendaService._collection.createIndex({ 'data.type': 1 'data.uniqueId': 1 } {
name: 'findAndUpdateUniqueJobIndex'
unique: true
});
这里创建了两个内嵌入文档的索引记录:
data.type data.uniqueId,建立索引的目的是令任务查询时高效,不会占用过多的 mongodb cpu
image.png
三、创建定时任务 // 主要应用:改变订单状态
await this.agendaService.create(OrderState.DELIVERED {
type: 'order'
uniqueId: event.serviceOrder.id
state: OrderState.DELIVERED
}).unique({
'data.type': 'order'
'data.uniqueId': event.serviceOrder.id
}).schedule(new Date(event.serviceOrder.endDate))
.save();
以上代码就是一个完整的定义唯一条件的定时任务