@hirehq/queue-service
v1.0.0
Published
HireHQ Queue Service - Private package for queue subscriber and publisher functionality
Readme
@hirehq/queue-service
A private npm package for HireHQ queue subscriber and publisher functionality using RabbitMQ.
Features
- Queue Subscriber: Consume messages from RabbitMQ queues
- Queue Publisher: Publish messages to RabbitMQ exchanges
- Unified Queue Service: Combined subscriber and publisher functionality
- TypeScript Support: Full TypeScript definitions included
- Configurable: Environment-based configuration with fallbacks
- Error Handling: Robust error handling and logging
Installation
npm install @hirehq/queue-serviceUsage
Basic Usage
import { createQueueService, MessageHandler } from '@hirehq/queue-service';
import { ConsumeMessage } from 'amqplib';
// Define your message handler
class MyMessageHandler implements MessageHandler {
async handleMessage(msg: ConsumeMessage): Promise<void> {
const messageContent = msg.content.toString();
console.log('Received message:', messageContent);
// Process your message here
const data = JSON.parse(messageContent);
// ... your processing logic
}
}
// Create queue service
const messageHandler = new MyMessageHandler();
const queueService = createQueueService(fastifyInstance, messageHandler);
// Start subscription
await queueService.startSubscription();
// Publish a message
const success = await queueService.publishMessage({
type: 'notification',
data: { userId: '123', message: 'Hello!' }
});
// Publish with custom routing key
const success = await queueService.publishMessage(
{ type: 'email', data: { to: '[email protected]' } },
'email.notification'
);Advanced Usage
import { QueueService, QueueConfig } from '@hirehq/queue-service';
// Custom configuration
const config: QueueConfig = {
queueName: 'my-custom-queue',
exchangeName: 'my-custom-exchange',
routingKey: 'my-custom-routing-key',
host: 'rabbitmq.example.com',
port: 5672,
username: 'myuser',
password: 'mypassword',
vhost: '/myvhost'
};
// Create with custom config
const queueService = new QueueService(fastifyInstance, messageHandler);
// Publish batch messages
const messages = [
{ type: 'email', data: { to: '[email protected]' } },
{ type: 'sms', data: { to: '+1234567890' } },
{ type: 'notification', data: { userId: '123' } }
];
const result = await queueService.publishBatch(messages, 'batch.notification');
console.log(`Published: ${result.success} successful, ${result.failed} failed`);
// Check subscription status
if (queueService.isSubscriptionActive()) {
console.log('Queue subscription is active');
}
// Close connection
await queueService.closeConnection();Environment Variables
The package uses the following environment variables with defaults:
RABBITMQ_QUEUE_NAME(default: 'notification_queue')RABBITMQ_EXCHANGE_NAME(default: 'notification_exchange')RABBITMQ_ROUTING_KEY(default: 'notification')RABBITMQ_HOST(default: 'localhost')RABBITMQ_PORT(default: 5672)RABBITMQ_USERNAME(default: 'guest')RABBITMQ_PASSWORD(default: 'guest')RABBITMQ_VHOST(default: '/')
API Reference
QueueService
Main class that combines subscriber and publisher functionality.
Methods
startSubscription(): Start consuming messages from the queuepublishMessage(message, routingKey?): Publish a single messagepublishMessageWithOptions(options): Publish with advanced optionspublishBatch(messages, routingKey?): Publish multiple messagescloseConnection(): Close the queue connectionisSubscriptionActive(): Check if subscription is active
QueueSubscriber
Handles message consumption from RabbitMQ queues.
Methods
startSubscription(): Start the subscriptionstopSubscription(): Stop the subscriptionisSubscriptionActive(): Check subscription status
QueuePublisher
Handles message publishing to RabbitMQ exchanges.
Methods
publishMessage(message, routingKey?): Publish a single messagepublishMessageWithOptions(options): Publish with optionspublishBatch(messages, routingKey?): Publish multiple messages
Types
QueueConfig
interface QueueConfig {
queueName?: string;
exchangeName?: string;
routingKey?: string;
host?: string;
port?: number;
username?: string;
password?: string;
vhost?: string;
}MessageHandler
interface MessageHandler {
handleMessage(msg: ConsumeMessage): Promise<void>;
}PublishMessageOptions
interface PublishMessageOptions {
message: any;
routingKey?: string;
exchangeName?: string;
persistent?: boolean;
}Development
Building
npm run buildTesting
npm testLinting
npm run lint
npm run lint:checkFormatting
npm run format
npm run format:checkLicense
UNLICENSED - Private package for HireHQ use only.
