firestore-queue
Version:
A powerful, scalable queue system built on Google Firestore with time-based indexing, auto-configuration, and connection reuse
158 lines โข 6.46 kB
JavaScript
;
/**
* Basic usage example for Fire Queue
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.basicExample = basicExample;
const index_1 = require("../index");
async function basicExample() {
console.log('๐ฅ Fire Queue Basic Usage Example');
console.log('=================================\n');
// 1. Create a queue with minimal configuration
const queue = (0, index_1.createQuickQueue)('your-project-id', {
queueName: 'example_queue',
ttlHours: 24,
batchSize: 10,
});
// 2. Set up monitoring
const monitor = (0, index_1.createMonitoring)(queue, {
logLevel: 'info',
enableHealthChecks: true,
metricsIntervalMs: 30000, // 30 seconds
});
try {
// 3. Initialize the queue
await queue.initialize();
monitor.start();
// 4. Add some example messages
console.log('๐ Enqueuing messages...');
const messageIds = await Promise.all([
queue.enqueue({
type: 'email',
payload: {
to: 'user@example.com',
subject: 'Welcome!',
body: 'Welcome to our service!'
},
priority: 1, // High priority
tags: ['welcome', 'email'],
}),
queue.enqueue({
type: 'data_processing',
payload: {
userId: '123',
action: 'process_upload',
fileId: 'file_456'
},
priority: 3, // Normal priority
ttlSeconds: 1800, // 30 minutes TTL
}),
queue.enqueue({
type: 'analytics',
payload: {
event: 'user_signup',
userId: '789',
timestamp: Date.now()
},
priority: 5, // Low priority
scheduledFor: new Date(Date.now() + 60000), // Process in 1 minute
}),
]);
console.log(`โ
Enqueued ${messageIds.length} messages`);
// 5. Update a message (unique feature of Fire Queue!)
console.log('๐ Updating message...');
await queue.updateMessage(messageIds[1], {
payload: {
userId: '123',
action: 'process_upload',
fileId: 'file_456',
priority: 'urgent' // Add new field
},
priority: 1, // Upgrade priority
});
// 6. Set up a consumer for email messages
console.log('๐ค Starting email consumer...');
await queue.consume('email-worker', async (messages) => {
console.log(`๐ง Processing ${messages.length} email messages`);
for (const message of messages) {
try {
console.log(` Sending email to: ${message.payload.to}`);
// Simulate email sending
await new Promise(resolve => setTimeout(resolve, 100));
await message.ack(); // Mark as completed
console.log(` โ
Email sent successfully: ${message.id}`);
}
catch (error) {
console.log(` โ Email failed: ${error}`);
await message.nack(error instanceof Error ? error.message : String(error));
}
}
});
// 7. Set up a consumer for data processing
console.log('๐ค Starting data processing consumer...');
await queue.consume('data-worker', async (messages) => {
console.log(`โ๏ธ Processing ${messages.length} data messages`);
for (const message of messages) {
try {
console.log(` Processing file: ${message.payload.fileId}`);
// Simulate data processing
await new Promise(resolve => setTimeout(resolve, 200));
await message.ack();
console.log(` โ
Data processed successfully: ${message.id}`);
}
catch (error) {
console.log(` โ Data processing failed: ${error}`);
await message.nack(error instanceof Error ? error.message : String(error));
}
}
});
// 8. Set up a consumer for analytics (with filtering)
console.log('๐ค Starting analytics consumer...');
await queue.consume('analytics-worker', async (messages) => {
console.log(`๐ Processing ${messages.length} analytics messages`);
for (const message of messages) {
try {
console.log(` Recording event: ${message.payload.event}`);
// Simulate analytics processing
await new Promise(resolve => setTimeout(resolve, 50));
await message.ack();
console.log(` โ
Analytics recorded: ${message.id}`);
}
catch (error) {
console.log(` โ Analytics failed: ${error}`);
await message.nack(error instanceof Error ? error.message : String(error));
}
}
});
// 9. Let it run for a while
console.log('\nโณ Processing messages for 2 minutes...');
await new Promise(resolve => setTimeout(resolve, 120000)); // 2 minutes
// 10. Show metrics
console.log('\n๐ Final Metrics:');
const metrics = await queue.getMetrics();
console.log(monitor.generateReport());
// 11. Show health status
console.log('\n๐ฅ Health Status:');
const health = await monitor.getHealthStatus();
console.log(`Status: ${health.healthy ? 'โ
Healthy' : 'โ Unhealthy'}`);
if (health.issues.length > 0) {
console.log(`Issues: ${health.issues.join(', ')}`);
}
}
catch (error) {
console.error('โ Error:', error);
}
finally {
// 12. Cleanup
console.log('\n๐งน Cleaning up...');
monitor.stop();
await queue.shutdown();
console.log('๐ Example completed');
}
}
// Run the example
if (require.main === module) {
basicExample().catch(console.error);
}
//# sourceMappingURL=basic-usage.js.map