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

2021-05-06  本文已影响0人  思考蛙

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

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

上一篇 下一篇

猜你喜欢

热点阅读