CloudAMQP with TypeScript
We recommend amqp-client.js. It reconnects automatically, recovers your consumers after a reconnect, ships its own type definitions and has no dependencies. It runs in Node.js, Bun, Deno and the browser.
npm install @cloudamqp/amqp-client
Publish and consume
These files use Node.js. Set "type": "module" in package.json, and set
CLOUDAMQP_URL to the AMQP URL from your instance’s details page in the
CloudAMQP console. Without it, the examples connect to a local broker.
Save the connection helper as amqp.ts:
import { AMQPSession } from "@cloudamqp/amqp-client"
// The session reconnects automatically and recovers consumers
export function connect(): Promise<AMQPSession> {
return AMQPSession.connect(process.env.CLOUDAMQP_URL || "amqp://guest:guest@localhost")
}
Save the publisher as publisher.ts:
import type { AMQPSession } from "@cloudamqp/amqp-client"
import { connect } from "./amqp.ts"
// Resolves once the broker has confirmed the message
export async function publish(session: AMQPSession, queueName: string, message: string) {
const queue = await session.queue(queueName, { durable: true })
await queue.publish(message, { deliveryMode: 2 })
console.log(` [x] Sent '${message}'`)
}
if (import.meta.main) {
const session = await connect()
await publish(session, "hello", "Hello CloudAMQP!")
await session.stop()
}
Save the consumer as worker.ts in the same directory:
import type { AMQPSession } from "@cloudamqp/amqp-client"
import { connect } from "./amqp.ts"
// The message is acked when the callback returns, and requeued if it throws
export async function consume(
session: AMQPSession,
queueName: string,
handler: (message: string) => void | Promise<void>,
) {
const queue = await session.queue(queueName, { durable: true })
return queue.subscribe({ prefetch: 10 }, async (msg) => {
await handler(msg.bodyString() ?? "")
})
}
if (import.meta.main) {
const session = await connect()
await consume(session, "hello", (message) => console.log(` [x] Received '${message}'`))
console.log(" [*] Waiting for messages. To exit press CTRL+C")
process.on("SIGINT", async () => {
await session.stop()
})
}
Node.js 24.2 and later run .ts files directly, without a build step. Run
node worker.ts in one terminal and node publisher.ts in another.
A runnable example is in typescript/amqp-client in cloudamqp/examples. The same example in plain JavaScript is on the JavaScript page.
Good to know
- Connect with the URL.
AMQPSession.connect(url), where the URL is the one on your instance’s details page in the CloudAMQP console. Withamqps://the server certificate is verified. - Use
AMQPSession, the high-level API. It reconnects with exponential backoff and recovers subscriptions;AMQPClientis the low-level API that doesn’t. - Make handlers idempotent, because a message can be delivered again after a reconnect.
- Set a prefetch limit when you subscribe, so a consumer doesn’t buffer more messages than it can handle.
- In the browser, use a
wss://URL; the client then connects over WebSockets. See AMQP over WebSockets.
See the API documentation for codecs, RPC and the low-level API.
Other JavaScript libraries
- amqplib, a widely used Node.js client without automatic reconnection
Video
Here’s a video showing how to set up a CloudAMQP instance and connect to it from Node.js with amqplib: