Nest.js Bull 未运行作业

问题描述 投票:0回答:1

我试图让 Bull 运行一些作业并运行设置,但出现超时错误

ERROR [ExceptionsHandler] Reached the max retries per request limit (which is 20). Refer to "maxRetriesPerRequest" option for details.

所以我已经设置了app.module

BullModule.forRootAsync({
      useFactory: () => ({
        redis: {
          host: 'localhost',
          port: 6379,
        },
        prefix: 'bull-queue',
        maxRetriesPerRequest: 3,
        defaultJobOptions: {
          attempts: 3,
          removeOnComplete: false,
          backoff: {
            type: 'exponential',
            delay: 1000,
          },
        },
      }),
    }),

然后我设置了一个消费者

import { Job } from 'bull';
import { Process, Processor } from '@nestjs/bull';

@Processor('code')
export class CodeConsumer {
  @Process('code-job')
  handleTranscode(job: Job) {
    console.log('Start audio compress into mp3...');
    console.log(job.data);
    console.log('completed!!');
  }
}

我的资产代码模块注册队列

import { Module } from '@nestjs/common';
import { AssetCodesService } from './asset-codes.service';
import { AssetCodesController } from './asset-codes.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AssetCode } from './entities/asset-code.entity';
import { BullModule } from '@nestjs/bull';
import { CodeConsumer } from './consumers/qrcode.consumer';

@Module({
  imports: [
    TypeOrmModule.forFeature([AssetCode]),
    BullModule.registerQueueAsync({
      name: 'code',
    }),
  ],
  controllers: [AssetCodesController],
  providers: [AssetCodesService, CodeConsumer],
})
export class AssetCodesModule {}

最后我的控制器注入队列并使用它来创建作业

constructor(
    private readonly assetCodesService: AssetCodesService,
    @InjectQueue('code') private codeQueue: Queue,
  ) {}

@Post('create')
  async startJob() {
    console.log(this.codeQueue.client.status);
    await this.codeQueue.add('code-job', {
      foo: 'bar',
    });
  }

控制器功能中的状态日志给我一条“正在重新连接”的消息

javascript node.js redis
1个回答
0
投票

原因可能是因为你的redis没有在本地机器上初始化。如果您在云中使用 Redis,请记住您不应输入 Redis 主机的完整路径,即:您应该仅对 url 进行着色,不带“redis://”,也不带端口结束。您只需将主机以及端口和密码放入其他变量中即可。

© www.soinside.com 2019 - 2024. All rights reserved.