firestore-queue
Version:
A powerful, scalable queue system built on Google Firestore with time-based indexing, auto-configuration, and connection reuse
110 lines โข 4.71 kB
JavaScript
;
/**
* Connection Reuse Example
* Shows how to share Firestore connections and reuse configurations
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.connectionReuseExample = connectionReuseExample;
const admin = __importStar(require("firebase-admin"));
const index_1 = require("../index");
async function connectionReuseExample() {
console.log('๐ Fire Queue - Connection Reuse Benefits');
console.log('==========================================\n');
// Scenario 1: You already have Firebase Admin initialized
console.log('๐ Scenario 1: Existing Firebase Admin App');
console.log('------------------------------------------');
// Your existing Firebase setup
if (admin.apps.length === 0) {
admin.initializeApp({
credential: admin.credential.cert('./firebase-service-account.json'),
projectId: 'your-project-id',
});
}
// Create a dedicated Firestore instance for your queues
const queueFirestore = new admin.firestore.Firestore({
projectId: 'your-project-id',
databaseId: 'firequeue',
});
// Use it directly with Fire Queue (no additional connection overhead)
const queue1 = await (0, index_1.createReadyQueue)({
projectId: 'your-project-id',
firestoreInstance: queueFirestore,
topic: 'user_events',
});
const queue2 = await (0, index_1.createReadyQueue)({
projectId: 'your-project-id',
firestoreInstance: queueFirestore, // Same connection!
topic: 'notifications',
});
console.log('โ
Two queues sharing one Firestore connection\n');
// Scenario 2: Using manager for multiple queues
console.log('๐ Scenario 2: FireQueueManager Pattern');
console.log('--------------------------------------');
const manager = await (0, index_1.setupFireQueue)({
projectId: 'your-project-id',
serviceAccountPath: './firebase-service-account.json',
});
// Create queues as needed - all share the same configuration
const emailQueue = await manager.createQueue('emails');
const analyticsQueue = await manager.createQueue('analytics');
const backupQueue = await manager.createQueue('backups');
console.log(`โ
Manager created ${manager.listQueues().length} queues`);
console.log(`๐ Active queues: ${manager.listQueues().join(', ')}\n`);
// Benefits demonstration
console.log('๐ก Key Benefits');
console.log('---------------');
console.log('โข Reduced connection overhead');
console.log('โข Reusable configuration');
console.log('โข Centralized management');
console.log('โข Standard initialization pattern');
console.log('โข Easy testing with mocked instances\n');
// Test operations
console.log('๐งช Quick Test');
console.log('--------------');
await emailQueue.enqueue('welcome', { userId: 'test' });
await analyticsQueue.enqueue('page_view', { page: '/home' });
console.log('๐ Messages queued successfully');
// Cleanup
await queue1.shutdown();
await queue2.shutdown();
await manager.shutdown();
console.log('โ
All connections closed');
}
if (require.main === module) {
connectionReuseExample().catch(console.error);
}
//# sourceMappingURL=connection-reuse-example.js.map