Files
stats/apps/worker/src/index.ts
Carl-Gerhard Lindesvärd 0afdf1a12e add worker
2024-02-05 21:33:43 +01:00

61 lines
1.4 KiB
TypeScript

import { createBullBoard } from '@bull-board/api';
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
import { ExpressAdapter } from '@bull-board/express';
import type { WorkerOptions } from 'bullmq';
import { Worker } from 'bullmq';
import express from 'express';
import { connection, eventsQueue } from '@mixan/queue';
import { cronQueue } from '@mixan/queue/src/queues';
import { cronJob } from './jobs/cron';
import { eventsJob } from './jobs/events';
const PORT = parseInt(process.env.WORKER_PORT || '3000', 10);
const serverAdapter = new ExpressAdapter();
serverAdapter.setBasePath('/');
const app = express();
const workerOptions: WorkerOptions = {
connection,
concurrency: parseInt(process.env.CONCURRENCY || '1', 10),
};
async function start() {
new Worker(eventsQueue.name, eventsJob, workerOptions);
new Worker(cronQueue.name, cronJob, workerOptions);
createBullBoard({
queues: [new BullMQAdapter(eventsQueue), new BullMQAdapter(cronQueue)],
serverAdapter: serverAdapter,
});
app.use('/', serverAdapter.getRouter());
app.listen(PORT, () => {
console.log(`For the UI, open http://localhost:${PORT}/`);
});
const repeatableJobs = await cronQueue.getRepeatableJobs();
console.log(repeatableJobs);
await cronQueue.add(
'salt',
{
type: 'salt',
payload: undefined,
},
{
jobId: 'salt',
repeat: {
utc: true,
pattern: '0 0 * * *',
},
}
);
}
start();