Skip to main content
Here’s what Arklow can guarantee about delivery.

At-least-once delivery

Arklow uses at-least-once delivery. The same action can reach a destination more than once when an acknowledgement is lost, a lease expires, or a retry is requested. Each delivery is an attempt. Attempts begin at 0 and increase when Arklow redelivers the action. The action ID remains the same across attempts. Build consumers to handle repeated delivery safely. Where the work has an external side effect, use the action ID or a stable business identifier as an idempotency key. The attempt number identifies only one delivery of that work; use action-level identity for idempotency.

Settlement Race Conditions

An acknowledgement, rejection, or deadline extension names both the action and its attempt number. It applies only while that attempt is authoritative. This prevents a delayed acknowledgement from attempt 0 from completing an action that has already moved on to attempt 1.
One pattern to understand if your work is still authoritative is to try send a Modack. If it rejects, you can be confident that another attempt may be in progress, and that you should not continue your attempt.Be careful to not overuse this pattern when other parts of your system may be sending Modack as well.

Settlement Verbs

The destination can respond to incoming work in four ways:

Source deduplication

Some sources, like those that resemble a Queue, identify work with their provider’s message ID. If for example GCP Pub/Sub or AWS SQS redeliver the same source message after acceptance, the redelivery resolves to the original action.
HTTP ingress has no equivalent deduplication. Every accepted POST creates a new action, even when two requests carry identical payloads.