💡 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
- 📦 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...');
});
});| 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.
