RabbitMQ
Lightweight, dependency-free RabbitMQ emulator speaking the AMQP 0-9-1 binary protocol.
| Key | Value |
|---|---|
| Port | 5672 |
| Protocol | AMQP 0-9-1 (TCP) |
| Size | ~90 KB |
| Startup | fast |
Default Connection
amqp://parlel:parlel@parlel-bridge:5672
Supported Operations
| Area | Operations |
|---|---|
| Connection | Handshake (Connection.Start/Tune/Open), channels |
| Queues | Queue.Declare, Queue.Delete |
| Exchanges | Exchange.Declare, Exchange.Delete |
| Messaging | Basic.Publish (push), Basic.Get / Basic.Consume (consume) |
Usage
Add the parlel/bridge sidecar to your test compose file. It exposes RabbitMQ at
parlel-bridge:5672 and your app connects with the unmodified real
amqplib client — no Parlel code in the app.
include:
- path: parlel-bridge.yml # image: parlel/bridge
services:
app:
build: .
env_file: test.env
depends_on:
parlel-bridge: { condition: service_healthy }
PARLEL_API_KEY=pk_... docker compose -f docker-compose.test.yml up
Then connect with the real client against the parlel-bridge hostname:
import amqp from "amqplib";
const conn = await amqp.connect("amqp://parlel:parlel@parlel-bridge:5672");
const ch = await conn.createChannel();
await ch.assertQueue("tasks");
ch.sendToQueue("tasks", Buffer.from("hello"));
const msg = await ch.get("tasks");
Access via Parlel Sandbox
RabbitMQ uses the binary AMQP protocol, so parlel_execute does not drive it —
point a native client (e.g. amqplib) at it instead. The parlel/bridge
sidecar exposes RabbitMQ at parlel-bridge:5672, tunneling the raw AMQP
protocol as TCP over the sandbox HTTPS preview proxy via WebSocket, so amqplib
connects to parlel-bridge:5672 unmodified — with just an API key (or
localhost if you run the bridge outside Docker and publish ports). No SSH
tunnel and no daytona CLI. A real amqplib client completes the AMQP 0-9-1
handshake, declares queues, publishes, and consumes (both push delivery and
Basic.Get) end-to-end.
Surface coverage
This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.
Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.
| Feature | Status |
|---|---|
| Queues / exchanges / publish / consume | Supported |
| Routing keys / bindings / topic exchanges | Simplified |
| Acknowledgements / prefetch / DLX | Not enforced |
| TLS / vhosts | Not supported |
Configuration — test.env
Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.
RABBITMQ_DEFAULT_USER=parlel
RABBITMQ_DEFAULT_PASS=parlel
RABBITMQ_DEFAULT_VHOST=/
<!-- parlel:testenv:end -->