Queues and the Event Bus are scoped per environment. Each environment keeps its own queues, topics, subscriptions, and message history, so what you set up in
development never touches production.The two building blocks in plain language
Queues
A to-do list for your app. Each message is picked up by exactly one worker, processed, and removed. Perfect for background jobs: sending an email, resizing an image, charging a card.
Event Bus
A loudspeaker. You publish one event to a topic, and every interested subscriber gets its own copy — a queue, your project’s API, or an external service. Perfect for “when X happens, do A, B, and C”.
When to use which
Activate one, the other, or both
There is nothing to “install”. Both services live under App Services and become available per environment:1
Open the panel
Go to Backend → App Services → Queues or App Services → Event Bus in the environment you want to work in.
2
Create your first resource
Create a queue (Queues panel) or a topic (Event Bus panel). The underlying infrastructure is provisioned for you automatically, scoped to this
(project, environment).3
Use them independently or connect them
A queue works on its own — send and receive messages. A topic works on its own — publish and subscribe. To combine them, add a subscription on a topic whose target is a queue.
You can adopt these features incrementally. Start with a single queue for one background job, or a single topic for one broadcast. Nothing else in your project changes, and neither service is required by the other.
How a message flows
Understanding the path a message takes makes the panels self-explanatory: Queue (point-to-point).- Your app sends a message to a queue.
- The message waits as Pending until a worker asks for it.
- A worker receives the message; it becomes In flight (invisible to other workers) for a limited time.
- The worker finishes and confirms (acknowledges) it — the message is removed.
- If the worker never confirms (crash, timeout), the message becomes visible again and is retried. After too many failed attempts it moves to the error list (dead-letter queue) for inspection.
- Your app publishes an event to a topic (an event type plus a JSON payload).
- The topic checks each subscription’s filter to see whether the event matches.
- Every matching subscription receives its own independent copy and delivers it to its target — a queue, your project’s internal API, or an external endpoint.
- Endpoint deliveries are retried on failure and land in that subscription’s error list if they keep failing. You can watch every attempt in the Activity tab.
Key ideas that apply to both
Everything is scoped to a project and environment
Everything is scoped to a project and environment
A queue or topic created in
development is completely separate from one with the same name in production. Switching the environment selector refreshes everything; the two never mix.Delivery is 'at least once'
Delivery is 'at least once'
Both services guarantee a message is delivered at least once, and may occasionally deliver a duplicate (for example, if a worker processed a job but crashed before confirming). Design your workers to be idempotent — safe to run twice with the same input. Sending a message with a dedup key also suppresses accidental duplicates within a short window.
Failed work is never lost silently
Failed work is never lost silently
When a message can’t be processed after its configured number of attempts, it moves to a dead-letter queue (DLQ) — an “error list” — instead of disappearing. You can inspect it, fix the cause, and redrive (retry) it. A red badge on a queue or subscription tells you the error list isn’t empty.
You can drive everything from the UI or the API
You can drive everything from the UI or the API
Every action in the Queues and Event Bus panels has a matching GraphQL operation, so you can automate the same tasks from your app or scripts. The panel is the friendly front door; the API is the same door for machines. See the API reference.
Internal targets need no configuration; external targets are explicit
Internal targets need no configuration; external targets are explicit
When the Event Bus delivers to your own project’s API (the default), authentication is handled for you — no URLs, no secrets. When it delivers to an external system, you provide the HTTPS URL and credentials, and Archie signs every request so the receiver can verify it came from you.
Where to go next
Queues
Create a queue, tune its settings in plain language, send a test message, watch its health, and handle errors.
Event Bus
Create a topic, publish events, and add subscriptions with the two-step wizard — to a queue, your API, or an external endpoint.
Using them together
The fan-out-then-process pattern: broadcast one event and have several queues handle their copies independently.
Reference & FAQ
The GraphQL operations, limits and defaults, message statuses, and answers to common questions.