LLaraNode
Events Package

Queueable Listeners

Run listeners asynchronously via the queue system.

Queueable Listeners

Run listeners asynchronously via the queue system.

Making a Listener Queueable

import { ListensTo, ShouldQueue } from "@lara-node/events";

@ListensTo(UserRegistered)
@ShouldQueue()
class SendWelcomeEmail {
  async handle(event: UserRegistered) {
    await Mail.to(event.user.email).send(new WelcomeMail(event.user));
  }
}

Queue Options

@ShouldQueue({
  queue: "emails",
  connection: "redis",
  tries: 3,
  timeout: 60,
})
class SendWelcomeEmail {
  // ...
}

After Commit

Run listener after database transaction commits:

import { ListensTo, ShouldQueue, AfterCommit } from "@lara-node/events";

@ListensTo(OrderCreated)
@ShouldQueue()
@AfterCommit()
class SendOrderConfirmation {
  async handle(event: OrderCreated) {
    // Only runs after transaction commits
    await Mail.to(event.order.user.email).send(new OrderConfirmationMail(event.order));
  }
}

QueueableListener Base

import { QueueableListener } from "@lara-node/events";

class SendWelcomeEmail extends QueueableListener {
  async handle(event: UserRegistered) {
    // Queueable by default
  }
}

Next Steps