Queues and the Event Bus are scoped per environment. Each environment keeps its own queues, topics, routes, 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 matching route gets its own copy — a queue, a REST endpoint, or GraphQL. 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 events. To combine them, add a route 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 route’s filter to see whether the event matches.
- Every matching route receives its own independent copy and delivers it to its target — a queue, your project’s own GraphQL API, or an external REST/GraphQL endpoint.
- Endpoint deliveries are retried on failure and land in that route’s own 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 a non-zero Failed count on a topic, tells you something needs attention. Every REST or GraphQL route has its own dead-letter queue, separate from any Queues-panel queue.
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. Note that the API still calls a route a subscription — the UI renamed the concept, the schema didn’t. See the API reference.
Internal targets still need a token; external targets need a URL too
Internal targets still need a token; external targets need a URL too
Delivering to your own project’s API (GraphQL, the default) skips the URL — you pick an existing mutation instead of writing one — but you still provide a Token / API key for authentication. Delivering to an external system needs the HTTPS URL and, for REST, is the only option today (internal REST delivery is coming). Archie signs every external 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 routes with the two-step wizard — to a queue, a REST endpoint, or GraphQL.
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.