快捷搜索:  汽车  科技

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 item 包括哪些(定时任务唯一条件的用法)(1)

Agenda 定时任务唯一条件的用法

使用 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

agenda item 包括哪些(定时任务唯一条件的用法)(2)

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();

以上代码就是一个完整的定义唯一条件的定时任务

猜您喜欢: