Skip to main content
The iii-queue worker decouples producers from consumers: a function publishes a message to a named topic and returns right away, and any function subscribed to that topic processes the message in the background, with retries and a dead-letter queue (DLQ) for messages that keep failing.
This page is a quick tour. For retry and back-off settings, queue adapters, and the full function list, see the iii-queue worker docs.

Consuming messages

A function consumes a topic by binding a durable:subscriber trigger to it. The engine runs the function once per message, passing the published data as the payload. Returning normally acknowledges the message; throwing nacks it, so it is retried and eventually dead-lettered.
  1. In a worker, register the consumer function and subscribe it to the topic. If you do not have a worker yet, scaffold one with iii worker init, then edit its source:
  1. Add the worker to start it:

Publishing a message

With the consumer running, publish to its topic. The engine delivers the data to every subscriber, so email::send runs once per message:
Open the console and go to the Traces tab to watch the message flow from the publish through to email::send running.

Inspecting Queue Topics

A topic appears here once a function subscribes to it, so these commands inspect the emails topic from above. (Publishing to a topic that nothing subscribes to does not register it, so there is nothing to inspect.) List every topic:
Get stats for the topic (depth is messages waiting for the consumer, dlq_depth is dead-lettered). A topic whose consumer keeps up sits at depth: 0:

Inspecting Dead Letter Queue Messages

A message reaches the dead-letter queue only once its subscribed function exhausts its retries, so the DLQ functions return empty until something fails.

Forcing a message into the dead-letter queue

To see the DLQ populated, make email::send fail: change the handler to throw, and set maxRetries: 0 in the trigger’s queue_config so the first failure dead-letters immediately instead of after the default three attempts.
Now publish a message; it fails and lands in the DLQ (exact ids, timestamps, and sizes vary per run):

Listing topics with dead-lettered messages

Browsing dead-lettered messages

Redriving dead-lettered messages

Fix the code back to what it was originally, then move the topic’s dead-lettered messages back to the main queue for reprocessing:
The fixed function now processes them, so the DLQ is empty again: