feat: integrate BullMQ for query processing and add QueueModule
This commit is contained in:
3
src/queue/constants.ts
Normal file
3
src/queue/constants.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export const QUEUE_NAMES = {
|
||||
QUERY: "query-queue",
|
||||
};
|
||||
23
src/queue/processors/query.processor.ts
Normal file
23
src/queue/processors/query.processor.ts
Normal 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
21
src/queue/queue.module.ts
Normal 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 {}
|
||||
Reference in New Issue
Block a user