Provider semantics
Install the corresponding optional peer dependency before creating a provider. If it is missing, QueueKit throws a QueueConfigError with the exact install command.
Acknowledgements
| Provider | complete() | retry() | reject() | Notes |
|---|---|---|---|---|
| BullMQ | no-op | — | — | Returning from the worker completes the job; throwing fails it. |
| Kafka | commits the next offset | — | — | Set autoAck to commit after a successful handler. |
| RabbitMQ | ack | nack + requeue | reject | reject({ requeue: true }) requeues instead of dropping. |
| Redis Streams | XACK | XADD with attempt + 1, then XACK | dead-letters (or requeues) | Retries append a new entry; the old one is never lost if the append fails. A reject without requeue is XADDed to the stream configured as native.deadLetter before being acknowledged. Works via node-redis or ioredis, against Redis and Valkey servers. |
| Redis Pub/Sub | no-op | — | — | Ephemeral fan-out; no persistence. |
| NATS Core | no-op | — | — | Messages are ephemeral. JetStream publishing available via the adapter. |
| Amazon SQS | deletes the message | changes visibility timeout | — | retry({ delay }) sets when the message becomes visible again. |
| Memory fake | records as acknowledged | requeues with attempt + 1 | dead-letters (or requeues) | Thrown handlers retry up to setMaxAttempts() (default 3), then dead-letter. |
Capabilities by provider
| Provider | Kind | Batch | Delayed | Retries | Priority | Dead letter | Groups | Ordering |
|---|---|---|---|---|---|---|---|---|
| BullMQ | job | ✓ | ✓ | ✓ | ✓ | — | — | — |
| Kafka | stream | ✓ | — | — | — | — | ✓ | ✓ |
| RabbitMQ | queue | — | — | ✓ | ✓ | ✓ | — | ✓ |
| Redis Streams | stream | — | — | ✓ | — | ✓ | ✓ | ✓ |
| Redis Pub/Sub | pubsub | — | — | — | — | — | — | — |
| NATS Core | pubsub | — | — | — | — | — | queue groups | — |
| Amazon SQS | queue | ✓ | ✓ | ✓ | — | ✓ | ✓ | FIFO |
Delivery and retries
Providers determine delivery and retry behavior. The normalized delay, priority, ttl, and retry fields on publish options are convenience values used only where the provider supports them; use native for broker-specific knobs.
Do not assume exactly-once delivery. QueueKit does not claim universal exactly-once delivery — make handlers idempotent.
message.metadata is application-only and is never implicitly sent to a broker.