Task queues that call your endpoint and retry on failure

Hand off background tasks at the priority, the delay, and the rate that you set, while Relay Queues calls your HTTP endpoint with each one. When your endpoint returns an error, Conjoin retries the task up to the retry limit that you set for the queue.

Move background jobs onto a queue that calls your HTTP endpoint

Push a task to a queue and give it a priority, a delay, or a rate limit. Conjoin calls the HTTP endpoint that you register for that queue and retries the call on a backoff that you configure. When a task fails on its last retry, Conjoin moves it to a dead-letter queue, where you can read the error and replay the task.

What you can set on a queue and on each task

Concurrency control

Set the maximum number of calls that Conjoin makes to your endpoint at the same time for one queue. During a traffic spike, Conjoin keeps no more than that many calls open and holds the rest of the tasks in the queue until a call completes.

Priority levels

Give each queue a priority. When two queues both hold pending tasks, Conjoin delivers the tasks from the higher-priority queue first.

Delayed delivery

Conjoin delivers a delayed task once its delay expires, so your endpoint can send a reminder email 24 hours after a customer signs up.

Rate limiting

Set the number of tasks per minute that Conjoin delivers from a queue. Where your endpoint calls an external API that enforces a limit of its own, set the rate of the queue below that limit so that your endpoint calls the API no faster than the API allows.

Automatic retries

Set the backoff strategy, the first delay, and the maximum number of retries for each queue. An endpoint that returns 503 for a few seconds still receives the task, because Conjoin calls it again after the endpoint recovers.

Dead-letter handling

Each task in a dead-letter queue includes the error from its last delivery, such as the HTTP status code from your endpoint. Once you fix the cause, you can replay the task to your endpoint.

< 100ms
Dequeue latency

Time until Conjoin dequeues a ready task

1M+
Tasks per queue

Pending tasks that one queue can hold

At least once
Task delivery

Conjoin returns a stalled task to the queue for another try

Build faster with solutions designed for real-world needs

Resize uploaded images in the background

Enqueue a task with the URL of the endpoint that does the work and the payload that the endpoint needs. Conjoin dequeues the task and sends that payload to the URL in an HTTP request, so the endpoint can be an ordinary serverless function.

Impact

The sample enqueues one resize of the Quillrun handbook cover into two preset sizes. Because the call includes an idempotency key, Conjoin keeps a single task when your code enqueues the same cover twice.

Prompt for a coding agent: Resize each uploaded cover into two sizes in the background, once per cover.

Conjoin IDE

Select a file to view its contents

Pace calls to a carrier API at 60 a minute

Set a rate limit and a concurrency limit when you create the queue. Conjoin delivers the tasks at that rate however fast your code enqueues them, so it spreads a burst of 600 tasks over ten minutes of calls.

Impact

In the sample, Conjoin calls the Tradewind Cargo carrier-rates endpoint at most 60 times a minute with no more than four calls open at once, so you will have no throttle to write in the sync code. Conjoin spaces the retries of a failed call exponentially from two seconds and moves the task to the dead-letter queue after the fifth failed call.

Prompt for a coding agent: Call the carrier rates API at most 60 times a minute, with four calls open at once.

Conjoin IDE

Select a file to view its contents

Delay a task with one parameter

Pass a delay in milliseconds when you enqueue the task. The queue holds it until that delay expires, after which Conjoin delivers it with the same retry and dead-letter behavior as any other task.

Impact

The sample passes a delayMs of 23 hours on the enqueue call, so Conjoin calls the Sandfern Pharmacies refill endpoint 23 hours later. You will have no timer or schedule table to maintain for the reminder.

Prompt for a coding agent: Send the refill reminder 23 hours from now.

Conjoin IDE

Select a file to view its contents

Replay failed exports after you repair the endpoint

List the dead-letter tasks of a queue and filter them by failure reason, such as an HTTP 5xx response from your endpoint. When the endpoint responds normally, replay each task so that Conjoin sends it to the endpoint again.

Impact

The sample lists up to 25 dead-letter tasks from the Yardgate metrics export queue whose failure reason is an HTTP 5xx response, then replays each one to your endpoint. Conjoin stores each failed task with its error, so you will have no failure table to maintain.

Prompt for a coding agent: Replay the exports that failed with a 5xx now that the endpoint works again.

Conjoin IDE

Select a file to view its contents

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.