π‘ Note: You are viewing the
nextbranch with upcoming features. For stable releases, check themasterbranch.
A high-performance Redis message queue for Node.js β simple to use, built for scale.
- π¬ Reliable delivery with retries
- π Multiple queue types: FIFO, LIFO, Priority
- π Flexible routing: Direct/Topic/Fanout exchanges + Direct queue publishing
- π₯ Pub/Sub & Point-to-Point delivery models with native consumer groups
- π¦ Queue-level rate limiting
- β° Built-in scheduler: delays, CRON, repeating
- π Queue state management: pause/stop/resume + audit
- β±οΈ Message TTL & consumption timeouts
- π High-throughput design with atomic Lua scripts
- π¦ Batch acks & Batch unacks β 99% fewer Redis calls
- π§΅ Worker threads for CPU-heavy handlers
- π Multi-queue producers & consumers with multiplexing support
- π‘ Event bus for real-time internal events
- π REST API with OpenAPI + Swagger
- π Web UI for live management
- π― Process-wide API β initialize once, factory methods, single shutdown
- π Dual callback & promise support
- π¦ ESM + CJS module support
- π TypeScript-first with rich docs
- Background jobs: emails, reports, data processing
- Task scheduling with automatic retries
- Microservices communication
- Real-time event processing for gaming, IoT, analytics
- Node.js 20+
- Redis 4+
- Choose one Redis client:
ioredisor@redis/client
# Core packages
npm install redis-smq@next redis-smq-common@next --save
# Pick a Redis client
npm install ioredis --save
# OR
npm install @redis/client --saveimport { RedisSMQ } from 'redis-smq';
import { ERedisConfigClient } from 'redis-smq-common';
// Simple initialization
RedisSMQ.initialize(
{
client: ERedisConfigClient.IOREDIS,
options: { host: '127.0.0.1', port: 6379 }
},
(err) => {
if (err) console.error('RedisSMQ init failed:', err);
}
);π§ Important: Use
RedisSMQ.initializeWithConfig()to save your configuration to Redis beforeRedisSMQ.initialize(). See Configuration for details.
import { RedisSMQ, EQueueType, EQueueDeliveryModel } from 'redis-smq';
const queueManager = RedisSMQ.createQueueManager();
queueManager.save(
'my_queue',
EQueueType.LIFO_QUEUE,
EQueueDeliveryModel.POINT_TO_POINT,
(err) => {
if (err) console.error('Queue creation failed:', err);
else console.log('β
Queue created');
}
);import { RedisSMQ, ProducibleMessage } from 'redis-smq';
const producer = RedisSMQ.createProducer();
producer.run((err) => {
if (err) return console.error('Producer failed:', err);
const msg = new ProducibleMessage()
.setQueue('my_queue')
.setBody('Hello World!');
producer.produce(msg, (err, ids) => {
if (err) console.error('Send failed:', err);
else console.log(`π¨ Sent message: ${ids.join(', ')}`);
});
});import { RedisSMQ } from 'redis-smq';
const consumer = RedisSMQ.createConsumer();
consumer.run((err) => {
if (err) return console.error('Consumer failed:', err);
const handler = (message, done) => {
console.log('π₯ Received:', message.body);
done(); // Acknowledge
};
consumer.consume('my_queue', handler, (err) => {
if (err) console.error('Consume failed:', err);
else console.log('π Listening on my_queue...');
});
});import { RedisSMQ, EQueueType, EQueueDeliveryModel } from 'redis-smq';
try {
// Initialize RedisSMQ
await RedisSMQ.initialize({
client: ERedisConfigClient.IOREDIS,
options: { host: 'localhost', port: 6379 }
});
// Create a Queue
const queueManager = RedisSMQ.createQueueManager();
await queueManager.save(
'my_queue',
EQueueType.LIFO_QUEUE,
EQueueDeliveryModel.POINT_TO_POINT,
);
// Create and start a producer
const producer = RedisSMQ.createProducer();
await producer.run();
// Send a message
const message = new ProducibleMessage()
.setQueue('my-queue')
.setBody({ hello: 'world' });
const messageIds = await producer.produce(message);
console.log('Message published:', messageIds);
// Create and start a consumer
const consumer = RedisSMQ.createConsumer();
await consumer.run();
// Consume messages
await consumer.consume('my-queue', async (message) => {
console.log('Received:', message.getBody());
// Successful acknowledgement
});
} catch (err) {
console.error('Error:', err);
}See Dual Callback & Promise Support.
| Package | Description |
|---|---|
| redis-smq | Core message queue library |
| redis-smq-common | Shared utilities |
| redis-smq-rest-api | REST API with Swagger UI |
| redis-smq-web-ui | Web dashboard |
| redis-smq-web-server | Web server for UI & API |
| redis-smq-benchmarks | Performance testing |
π Version Compatibility: Always use matching versions. See version compatibility guide.
- Full Documentation - Complete API reference and guides
- REST API - API endpoints and usage
- Web UI - Dashboard setup and features
We welcome contributions! Please read CONTRIBUTING.md for guidelines.
RedisSMQ is released under the MIT License.
