NestJs:如何使用Bull连接到RedisCluster?

fzwojiic  于 9个月前  发布在  Redis
关注(0)|答案(1)|浏览(86)

我有一个全局可用的Redis模块,它创建了一个RedisCluster连接,我正在AppModule中导入。

import { Module, Global } from '@nestjs/common';
import { Redis } from 'ioredis';

@Global()
@Module({
    providers: [{
        provide: 'REDIS_CONNECTION',
        useFactory: () => {
            return new Redis.Cluster([
                {
                    host: process.env?.REDIS_HOST,
                    port: process.env?.REDIS_PORT
                        ? Number(process.env?.REDIS_PORT)
                        : 6379,
                },
            ], {
                redisOptions: {
                    ...(process.env?.REDIS_PASSWORD && {
                        password: process.env.REDIS_PASSWORD,
                    }),
                    maxRetriesPerRequest: null,
                    enableReadyCheck: false,
                },
            });
        }

    }],
    exports: ['REDIS_CONNECTION'],
})
export class RedisModule { }

我有另一个名为RedisModule的模块,我需要在其中设置bull的配置,但不确定如何注入相同的全局可用RedisCluster连接

@Module({
  imports: [
    BullModule.forRootAsync({
       **// how to inject connection here?**
    }),
  ],
  providers: [QueueProducerService, QueueConsumerService, Logger],
  exports: [QueueProducerService],
})
export class QueueModule {}
envsm3lx

envsm3lx1#

这个应该可以了

@Module({
  imports: [
    BullModule.forRootAsync({
      imports: [RedisModule],
      useFactory: (connection: Redis.Cluster) => ({
        options: {
          connection,
        },
      }),
      inject: ['REDIS_CONNECTION'],
      providers: [QueueProducerService, QueueConsumerService, Logger],
      exports: [QueueProducerService],
    }),
  ],
})
export class QueueModule {}

相关问题