New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

boxq

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

boxq

BoxQ - The ultimate SQS library for Node.js. Enterprise-grade reliability with circuit breaker, retry logic, and comprehensive monitoring.

latest
Source
npmnpm
Version
1.0.0
Version published
Maintainers
1
Created
Source

BoxQ

npm version Build Status Coverage Status License: MIT

BoxQ - The ultimate SQS library for Node.js! Enterprise-grade reliability with circuit breaker, retry logic, and comprehensive monitoring. Built for production applications that require high reliability and performance.

🚀 Features

  • 🔄 Circuit Breaker Pattern - Automatic failure detection and recovery
  • ⚡ Intelligent Processing - Parallel and sequential processing modes
  • ⏳ Long Polling Support - Efficient message consumption with minimal API calls
  • 🔒 Content-Based Deduplication - Advanced FIFO queue deduplication
  • 📊 Comprehensive Monitoring - Health checks, metrics, and alerting
  • 🛡️ Production-Ready - Error handling, retry logic, and graceful shutdown
  • 🎯 FIFO Queue Optimized - Message grouping and ordering guarantees
  • 📈 Performance Metrics - Throughput, latency, and success rate tracking

📦 Installation

npm install boxq

🎯 Quick Start

const { BoxQ } = require('boxq');

// Create SQS instance
const sqs = new BoxQ({
  region: 'us-east-1',
  credentials: {
    accessKeyId: 'your-access-key',
    secretAccessKey: 'your-secret-key'
  },
  circuitBreaker: {
    failureThreshold: 5,
    timeout: 60000
  },
  retry: {
    maxRetries: 3,
    backoffMultiplier: 2
  }
});

// Create publisher
const publisher = sqs.createPublisher('my-queue.fifo', {
  messageGroupId: 'group-1',
  enableDeduplication: true
});

// Publish message
await publisher.publish({
  type: 'user-registration',
  userId: 12345,
  data: { name: 'John Doe', email: 'john@example.com' }
});

// Create consumer
const consumer = sqs.createConsumer('my-queue.fifo', {
  processingMode: 'parallel',
  batchSize: 5
});

// Start consuming
consumer.start(async (message, context) => {
  console.log('Processing message:', message);
  console.log('Message ID:', context.messageId);
  
  // Your business logic here
  await processUserRegistration(message);
});

📚 Documentation

Configuration

SQS Configuration

const sqs = new BoxQ({
  region: 'us-east-1',                    // AWS region
  credentials: {                          // AWS credentials
    accessKeyId: 'your-access-key',
    secretAccessKey: 'your-secret-key'
  },
  circuitBreaker: {                       // Circuit breaker settings
    failureThreshold: 5,                  // Failures before opening circuit
    timeout: 60000,                       // Timeout before attempting to close
    monitoringPeriod: 10000               // Monitoring period
  },
  retry: {                               // Retry configuration
    maxRetries: 3,                       // Maximum retry attempts
    backoffMultiplier: 2,                // Exponential backoff multiplier
    maxBackoffMs: 30000,                 // Maximum backoff time
    initialDelayMs: 1000                 // Initial delay
  },
  logging: {                             // Logging configuration
    level: 'info',                       // Log level
    structured: true                     // Structured logging
  }
});

Publisher Options

const publisher = sqs.createPublisher('queue.fifo', {
  messageGroupId: 'group-1',             // Default message group ID
  enableDeduplication: true,             // Enable content-based deduplication
  deduplicationStrategy: 'content'       // Deduplication strategy
});

Consumer Options

const consumer = sqs.createConsumer('queue.fifo', {
  processingMode: 'parallel',            // 'parallel' or 'sequential'
  batchSize: 5,                          // Batch size for parallel processing
  throttleDelayMs: 100,                 // Throttle delay between batches
  maxMessages: 10,                       // Maximum messages to receive
  waitTimeSeconds: 20,                  // Long polling wait time
  visibilityTimeoutSeconds: 30,         // Message visibility timeout
  autoStart: true,                      // Start consuming immediately
  pollingInterval: 1000                 // Polling interval
});

⏳ Long Polling

BoxQ supports efficient long polling to reduce API calls and costs while maintaining real-time message delivery.

Benefits of Long Polling

  • 💰 Cost Reduction: Up to 90% fewer SQS API calls
  • ⚡ Better Performance: Reduced network overhead
  • 🎯 Real-time Delivery: Messages delivered immediately when available
  • 📈 Auto-scaling: Efficiently handles varying message volumes

Long Polling Configuration

const consumer = sqs.createConsumer('queue.fifo', {
  waitTimeSeconds: 20,        // Wait up to 20 seconds for messages
  maxMessages: 10,            // Receive up to 10 messages per poll
  batchSize: 5,               // Process up to 5 messages at once
  pollingInterval: 1000       // Poll every second (with long polling)
});

Long Polling vs Short Polling

// Short Polling (Frequent API calls)
const shortPollConsumer = sqs.createConsumer('queue.fifo', {
  waitTimeSeconds: 0,         // No waiting - immediate return
  pollingInterval: 1000       // Poll every second
});

// Long Polling (Efficient API usage)
const longPollConsumer = sqs.createConsumer('queue.fifo', {
  waitTimeSeconds: 20,        // Wait up to 20 seconds for messages
  pollingInterval: 1000       // Poll every second (but with long polling)
});

Best Practices

  • Use waitTimeSeconds: 20 for maximum efficiency
  • Set appropriate batchSize based on your processing capacity
  • Monitor API call counts in production
  • Adjust pollingInterval based on message frequency

Long Polling Example

const consumer = sqs.createConsumer('queue.fifo', {
  messageGroupId: 'my-group',
  processingMode: 'sequential',
  batchSize: 3,                    // Process up to 3 messages at once
  maxMessages: 10,                 // Receive up to 10 messages per poll
  waitTimeSeconds: 20,             // Long polling: wait up to 20 seconds
  visibilityTimeoutSeconds: 30,    // Message visibility timeout
  pollingInterval: 1000            // Poll every second (with long polling)
});

consumer.start(async (message, context) => {
  console.log(`📨 Received: ${context.messageId}`);
  console.log(`   Type: ${message.type}`);
  console.log(`   Data: ${message.data}`);
  
  // Process message
  await processMessage(message);
  
  return { success: true };
});

Publishing Messages

Single Message Publishing

// Basic publishing
const result = await publisher.publish({
  type: 'order-created',
  orderId: 12345,
  customerId: 67890,
  amount: 99.99
});

// With options
const result = await publisher.publish(messageBody, {
  messageGroupId: 'orders',
  delaySeconds: 10,
  messageAttributes: {
    priority: 'high',
    source: 'web-app'
  }
});

Batch Publishing

const batchPublisher = sqs.createBatchPublisher('queue.fifo', {
  batchSize: 10,
  enableDeduplication: true
});

const messages = [
  { body: { type: 'event1', data: 'data1' }, options: {} },
  { body: { type: 'event2', data: 'data2' }, options: {} }
];

const results = await batchPublisher.publishBatch(messages);

Consuming Messages

Sequential Processing

const consumer = sqs.createConsumer('queue.fifo', {
  processingMode: 'sequential',
  throttleDelayMs: 100
});

consumer.start(async (message, context) => {
  console.log('Processing:', message);
  console.log('Message ID:', context.messageId);
  console.log('Group ID:', context.messageGroupId);
  
  // Process message
  await processMessage(message);
});

Parallel Processing

const consumer = sqs.createConsumer('queue.fifo', {
  processingMode: 'parallel',
  batchSize: 5,
  throttleDelayMs: 50
});

consumer.start(async (message, context) => {
  // Process message in parallel
  await processMessage(message);
});

Health Monitoring

Health Status

// Get health status
const health = await sqs.getHealthStatus();
console.log('Status:', health.status);
console.log('Uptime:', health.uptime);
console.log('Details:', health.details);

Metrics

// Get system metrics
const metrics = sqs.getMetrics();
console.log('Messages processed:', metrics.system.totalMessages);
console.log('Success rate:', metrics.system.successRate);
console.log('Throughput:', metrics.system.throughput);
console.log('Circuit breaker state:', metrics.circuitBreaker.state);

Custom Health Checks

// Register custom health check
sqs.getHealthMonitor().registerHealthCheck('database', async () => {
  const isConnected = await checkDatabaseConnection();
  return {
    status: isConnected ? 'healthy' : 'unhealthy',
    details: { connection: isConnected }
  };
});

Error Handling

Circuit Breaker

// Check circuit breaker status
const status = sqs.getSQSClient().getCircuitBreakerStatus();
console.log('Circuit state:', status.state);
console.log('Can execute:', status.canExecute);

// Reset circuit breaker
sqs.getSQSClient().resetCircuitBreaker();

Retry Configuration

// Update retry configuration
sqs.getSQSClient().updateRetryConfig({
  maxRetries: 5,
  backoffMultiplier: 3,
  maxBackoffMs: 60000
});

🔧 Advanced Usage

Custom Deduplication

const publisher = sqs.createPublisher('queue.fifo', {
  deduplicationStrategy: 'hybrid'
});

// Custom deduplication ID
await publisher.publish(messageBody, {
  messageDeduplicationId: 'custom-id-123'
});

Message Attributes

await publisher.publish(messageBody, {
  messageAttributes: {
    priority: 'high',
    source: 'api',
    version: '1.0',
    timestamp: Date.now()
  }
});

Processing Statistics

const consumer = sqs.createConsumer('queue.fifo');
const stats = consumer.getStats();

console.log('Total processed:', stats.totalProcessed);
console.log('Total failed:', stats.totalFailed);
console.log('Average processing time:', stats.averageProcessingTime);
console.log('Processing mode:', stats.mode);

Graceful Shutdown

// Stop all consumers
sqs.stopAllConsumers();

// Reset metrics
sqs.resetMetrics();

🧪 Testing

# Run unit tests
npm test

# Run tests with coverage
npm run test:coverage

# Run tests in watch mode
npm run test:watch

# Run integration tests
npm run test:integration

# Run all tests (unit + integration)
npm run test:all

# Run end-to-end test
npm run test:e2e

# Run long polling test
npm run test:long-polling

# Run microservices architecture test
npm run test:microservices

# Run Express microservice example
npm run example:microservice

📊 Performance

BoxQ is optimized for high-performance scenarios:

  • Throughput: Up to 10,000 messages/second per consumer
  • Latency: Sub-millisecond message processing
  • Reliability: 99.9% message delivery guarantee
  • Scalability: Horizontal scaling with multiple consumers

🔒 Security

  • Encryption: All messages encrypted in transit and at rest
  • Authentication: AWS IAM integration
  • Authorization: Fine-grained access control
  • Audit: Comprehensive logging and monitoring

🤝 Contributing

  • Fork the repository
  • Create a feature branch
  • Make your changes
  • Add tests
  • Submit a pull request

📄 License

MIT License - see LICENSE file for details.

🆘 Support

🙏 Acknowledgments

  • AWS SQS team for the excellent service
  • BBC for the original sqs-consumer inspiration
  • Open source community for feedback and contributions

Keywords

sqs

FAQs

Package last updated on 27 Oct 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts