feat: integrate BullMQ for query processing and add QueueModule

This commit is contained in:
Boris D
2025-10-06 16:32:28 +03:00
parent 39c40013b2
commit 67099969db
9 changed files with 208 additions and 14 deletions

3
src/queue/constants.ts Normal file
View File

@ -0,0 +1,3 @@
export const QUEUE_NAMES = {
QUERY: "query-queue",
};

View File

@ -0,0 +1,23 @@
import { Processor, WorkerHost } from "@nestjs/bullmq";
import { Job } from "bullmq";
import { QueryExecuterService } from "src/query/executer/query.executer.service";
import { QUEUE_NAMES } from "../constants";
export interface QueryJob {
token: string;
queryData: any;
headers: Record<string, any>;
}
@Processor(QUEUE_NAMES.QUERY, { concurrency: 5 })
export class QueryProcessor extends WorkerHost {
constructor(private readonly queryExecuterService: QueryExecuterService) {
super();
}
async process(job: Job<QueryJob>) {
const { token, queryData, headers } = job.data;
return await this.queryExecuterService.runQuery(token, queryData, headers);
}
}

21
src/queue/queue.module.ts Normal file
View File

@ -0,0 +1,21 @@
import { BullModule } from "@nestjs/bullmq";
import { forwardRef, Module } from "@nestjs/common";
import { QueryProcessor } from "./processors/query.processor";
import { QUEUE_NAMES } from "./constants";
import { QueryModule } from "src/query/query.module";
@Module({
imports: [
forwardRef(() => QueryModule),
BullModule.forRoot({
connection: {
host: process.env.REDIS_HOST || "localhost",
port: parseInt(process.env.REDIS_PORT) || 6379,
},
}),
BullModule.registerQueue({ name: QUEUE_NAMES.QUERY }),
],
providers: [QueryProcessor],
exports: [BullModule],
})
export class QueueModule {}