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

Providercomplete()retry()reject()Notes
BullMQno-op——Returning from the worker completes the job; throwing fails it.
Kafkacommits the next offset——Set autoAck to commit after a successful handler.
RabbitMQacknack + requeuerejectreject({ requeue: true }) requeues instead of dropping.
Redis StreamsXACKXADD with attempt + 1, then XACKdead-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/Subno-op——Ephemeral fan-out; no persistence.
NATS Coreno-op——Messages are ephemeral. JetStream publishing available via the adapter.
Amazon SQSdeletes the messagechanges visibility timeout—retry({ delay }) sets when the message becomes visible again.
Memory fakerecords as acknowledgedrequeues with attempt + 1dead-letters (or requeues)Thrown handlers retry up to setMaxAttempts() (default 3), then dead-letter.

Capabilities by provider

ProviderKindBatchDelayedRetriesPriorityDead letterGroupsOrdering
BullMQjob✓✓✓✓———
Kafkastream✓————✓✓
RabbitMQqueue——✓✓✓—✓
Redis Streamsstream——✓—✓✓✓
Redis Pub/Subpubsub———————
NATS Corepubsub—————queue groups—
Amazon SQSqueue✓✓✓—✓✓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.