UNPKG

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
#!/usr/bin/env ts-node "use strict"; /** * 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