簡體   English   中英

如何動態注冊隊列以嵌套js牛隊列

[英]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

公牛Github

queue.getJobs() 參考

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM