Files
firecrawl/apps/api/src/services/queue-service.ts
T

63 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-07-30 13:27:23 -04:00
import { Queue } from "bullmq";
2024-11-07 20:57:33 +01:00
import { logger } from "../lib/logger";
2024-07-30 13:27:23 -04:00
import IORedis from "ioredis";
2024-04-15 17:01:47 -04:00
2024-07-30 14:44:13 -04:00
let scrapeQueue: Queue;
2025-01-03 20:44:27 -03:00
let extractQueue: Queue;
let loggingQueue: Queue;
2024-07-30 14:44:13 -04:00
2024-11-07 20:57:33 +01:00
export const redisConnection = new IORedis(process.env.REDIS_URL!, {
2024-12-11 19:51:08 -03:00
maxRetriesPerRequest: null,
2024-07-30 13:27:23 -04:00
});
2024-04-15 17:01:47 -04:00
2024-07-30 14:44:13 -04:00
export const scrapeQueueName = "{scrapeQueue}";
2025-01-03 20:44:27 -03:00
export const extractQueueName = "{extractQueue}";
export const loggingQueueName = "{loggingQueue}";
2024-07-30 13:27:23 -04:00
2024-07-30 14:44:13 -04:00
export function getScrapeQueue() {
if (!scrapeQueue) {
scrapeQueue = new Queue(
scrapeQueueName,
{
connection: redisConnection,
defaultJobOptions: {
removeOnComplete: {
2024-12-11 19:51:08 -03:00
age: 90000, // 25 hours
},
removeOnFail: {
2024-12-11 19:51:08 -03:00
age: 90000, // 25 hours
},
},
2025-01-03 20:44:27 -03:00
}
2024-07-30 14:44:13 -04:00
);
2024-11-07 20:57:33 +01:00
logger.info("Web scraper queue created");
2024-07-30 14:44:13 -04:00
}
return scrapeQueue;
}
2025-01-03 20:44:27 -03:00
export function getExtractQueue() {
if (!extractQueue) {
extractQueue = new Queue(
extractQueueName,
{
connection: redisConnection,
defaultJobOptions: {
removeOnComplete: {
age: 90000, // 25 hours
},
removeOnFail: {
age: 90000, // 25 hours
},
},
}
);
logger.info("Extraction queue created");
}
return extractQueue;
}
2024-08-22 22:38:39 +02:00
// === REMOVED IN FAVOR OF POLLING -- NOT RELIABLE
// import { QueueEvents } from 'bullmq';
2024-12-11 19:46:11 -03:00
// export const scrapeQueueEvents = new QueueEvents(scrapeQueueName, { connection: redisConnection.duplicate() });