[英]How to dynamically register queues to nest js bull queue
當您知道要注冊的隊列列表時,您可以在 nestjs 模塊實例化中使用 registerQueue() 添加它們,但如何動態注冊隊列,例如。 如果我有一個多租戶架構,當創建一個新租戶時我想動態注冊一個新隊列,是否可以使用嵌套 js 公牛隊列?
我不知道您是否可以使用 Nest package 做到這一點。 檢查來自 Nestjs 創建者的GitHub 問題響應。
但是,您可以使用原版 Bull package。
例如,假設您有這樣的 Controller:
@Controller()
export class AppController {
constructor(
private queuesManager: QueuesManagerService
) {}
@Post(['generate-queue'])
generateQueue(
@Body() generateQueueDto: GenerateQueueDto
): Promise<GenerateQueueResponse> {
return this.queuesManager.generateQueue(generateQueueDto.name);
}
@Get(['get-all-jobs'])
getAllJobsFromQueue(
@Query() queryParameters: GetAllJobsEndpointQueryParameters
): Promise<Bull.Job[]> {
return this.queuesManager.getAllJobsFromQueue(queryParameters.name);
}
}
QueuesManagerService
看起來像這樣:
@Injectable()
export class QueuesManagerService {
async generateQueue(name: string): Promise<GenerateQueueResponse> {
const queue: Bull.Queue = new Bull(name);
await queue.add({ test: 'test' });
return {
status: 200,
message: `Queue with name ${name} generated successfully!`,
};
}
async getAllJobsFromQueue(name: string): Promise<Bull.Job[]> {
const jobStatuses: Bull.JobStatus[] = [
'waiting',
'delayed',
'active',
'completed',
'failed',
];
const queue: Bull.Queue = new Bull(name);
const jobs: Bull.Job[] = await queue.getJobs(jobStatuses);
return jobs;
}
}
您可以使用curl
與服務器交互:
$ curl -X POST -d 'name=myFirstQueue' localhost:3333/api/generate-queue
# response
{"status":200,"message":"Queue with name myFirstQueue generated successfully!"}
###
$ curl localhost:3333/api/get-all-jobs?name=myFirstQueue
# response
[{"id":"1","name":"__default__","data":{"test":"test"},"opts":{"attempts":1,"delay":0,"timestamp":1639085434398},"progress":0,"delay":0,"timestamp":1639085434398,"attemptsMade":0,"stacktrace":[],"returnvalue":null,"finishedOn":null,"processedOn":null}]
PS1 :
PS2 :
我的類和接口:
export class GetAllJobsEndpointQueryParameters {
@IsNotEmpty()
name!: string;
}
export class GenerateQueueDto {
@IsNotEmpty()
name!: string;
}
export interface GenerateQueueResponse {
status: number;
message: string;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.