microme
v0.0.3
Published
A RabbitMQ abstraction to send and receive events
Maintainers
Readme
Microme
A lightweight abstraction for RabbitMQ using TypeScript and Bun, built for event-driven microservices. This library provides simple, strongly-typed classes for sending and receiving messages through exchanges.
✨ Features
- 🔁 Supports RabbitMQ exchanges (
direct,topic,fanout) - 📤
MicroSenderclass to emit messages - 📥
MicroReceiverclass to consume messages - 🔐 Strongly typed messages via generics
- 🚀 Compatible with Bun, Node.js, Docker, and modern runtimes
📦 Installation
bun add amqplib microme
# or
npm install amqplib micromeSending messages
import { MicroSender } from "microme";
// Create a sender with a "direct" exchange
const sender = new MicroSender("amqp://localhost", "video.exchange");
await sender.connect();
// Send a message using a routing key (used as the queue name)
await sender.send("video.created", {
id: "abc123",
title: "Intro.mp4",
uploadedAt: new Date().toISOString(),
});
await sender.close();Changing exchange type
import { MicroSender } from "microme";
// Create a sender with a "topic" exchange
const sender = new MicroSender("amqp://localhost", "video.exchange", "topic");
await sender.connect();
// Send a message using a routing key (used as the queue name)
await sender.send("video.created", {
id: "abc123",
title: "Intro.mp4",
uploadedAt: new Date().toISOString(),
});
await sender.close();Receiving messages
import { MicroReceiver } from "microme";
// Create a receiver for the same exchange
const receiver = new MicroReceiver("amqp://localhost", "video.exchange");
await receiver.connect();
// Listen to messages with the routing key "video.created"
await receiver.listen<{ id: string; title: string; uploadedAt: string }>(
"video.created",
(msg) => {
console.log("🎬 Video Created:");
console.log("ID:", msg.id);
console.log("Title:", msg.title);
console.log("Uploaded at:", msg.uploadedAt);
}
);API Reference
MicroSender
new MicroSender(uri: string, exchange: string, exchangeType?: "direct" | "topic" | "fanout")MicroReceiver
new MicroReceiver(uri: string, exchange: string, exchangeType?: "direct" | "topic" | "fanout")