| |
| |
| |
| |
|
|
| process.env.START_QUEUE_WORKERS = "true"; |
|
|
| async function main() { |
| const { connectRedis } = await import("@/lib/redis"); |
|
|
| console.log("Starting dedicated worker process..."); |
|
|
| const redis = await connectRedis(); |
|
|
| if (!redis) { |
| console.error("Redis/Valkey is required for the worker process."); |
| process.exit(1); |
| } |
|
|
| try { |
| await redis.ping(); |
| } catch (error) { |
| console.error("Queue backend is unreachable:", error); |
| process.exit(1); |
| } |
|
|
| const { startWorker } = await import("@/lib/queue"); |
| const { startBackgroundWorkers, stopBackgroundWorkers } = await import("@/lib/workers"); |
|
|
| try { |
| const workers = await startWorker(); |
| await startBackgroundWorkers(); |
|
|
| console.log("Worker process is online."); |
|
|
| const shutdown = async () => { |
| console.log("Stopping worker process..."); |
| stopBackgroundWorkers(); |
| await workers.emailWorker.close(); |
| await workers.scrapingWorker.close(); |
| await workers.workflowWorker.close(); |
| process.exit(0); |
| }; |
|
|
| process.on("SIGTERM", shutdown); |
| process.on("SIGINT", shutdown); |
| } catch (error) { |
| console.error("Failed to start worker:", error); |
| process.exit(1); |
| } |
| } |
|
|
| main().catch((error) => { |
| console.error("Worker bootstrap failed:", error); |
| process.exit(1); |
| }); |
|
|