Skip to content

Commit 83e0b8a

Browse files
authored
fix: queue module dependency imports (#1033)
* fix: queue module dependency imports * chore: bull module for root
1 parent ac1626a commit 83e0b8a

File tree

4 files changed

+49
-19
lines changed

4 files changed

+49
-19
lines changed

apps/nestjs-backend/src/app.module.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { BullModule } from '@nestjs/bullmq';
22
import type { ModuleMetadata } from '@nestjs/common';
33
import { Module } from '@nestjs/common';
4+
import { ConditionalModule, ConfigService } from '@nestjs/config';
5+
import Redis from 'ioredis';
6+
import type { ICacheConfig } from './configs/cache.config';
7+
import { ConfigModule } from './configs/config.module';
48
import { AccessTokenModule } from './features/access-token/access-token.module';
59
import { AggregationOpenApiModule } from './features/aggregation/open-api/aggregation-open-api.module';
610
import { AttachmentsModule } from './features/attachments/attachments.module';
@@ -71,17 +75,26 @@ export const appModules = {
7175
imports: [
7276
GlobalModule,
7377
...appModules.imports,
74-
...(process.env.BACKEND_CACHE_REDIS_URI
75-
? [
76-
BullModule.forRoot({
77-
connection: {
78-
lazyConnect: true,
79-
maxRetriesPerRequest: null,
80-
url: process.env.BACKEND_CACHE_REDIS_URI,
81-
},
82-
}),
83-
]
84-
: []),
78+
ConditionalModule.registerWhen(
79+
BullModule.forRootAsync({
80+
imports: [ConfigModule],
81+
useFactory: async (configService: ConfigService) => {
82+
const redisUri = configService.get<ICacheConfig>('cache')?.redis.uri;
83+
if (!redisUri) {
84+
throw new Error('Redis URI is not defined');
85+
}
86+
const redis = new Redis(redisUri, { lazyConnect: true, maxRetriesPerRequest: null });
87+
await redis.connect();
88+
return {
89+
connection: redis,
90+
};
91+
},
92+
inject: [ConfigService],
93+
}),
94+
(env) => {
95+
return Boolean(env.BACKEND_CACHE_REDIS_URI);
96+
}
97+
),
8598
],
8699
controllers: [],
87100
})
Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
import { BullModule } from '@nestjs/bullmq';
22
import type { DynamicModule } from '@nestjs/common';
33
import { Module } from '@nestjs/common';
4+
import { ConditionalModule } from '@nestjs/config';
5+
import { ConfigModule } from '../../configs/config.module';
46
import { FallbackQueueModule } from './fallback/fallback-queue.module';
57

6-
@Module({})
8+
@Module({
9+
imports: [ConfigModule],
10+
})
711
export class EventJobModule {
8-
static registerQueue(name: string): DynamicModule {
9-
const exportModule = process.env.BACKEND_CACHE_REDIS_URI ? BullModule : FallbackQueueModule;
12+
static async registerQueue(name: string): Promise<DynamicModule> {
13+
const [bullQueue, fallbackQueue] = await Promise.all([
14+
ConditionalModule.registerWhen(BullModule.registerQueue({ name }), (env) =>
15+
Boolean(env.BACKEND_CACHE_REDIS_URI)
16+
),
17+
ConditionalModule.registerWhen(
18+
FallbackQueueModule.registerQueue(name),
19+
(env) => !env.BACKEND_CACHE_REDIS_URI
20+
),
21+
]);
22+
1023
return {
1124
module: EventJobModule,
12-
imports: [exportModule.registerQueue(name)],
13-
exports: [exportModule],
25+
imports: [bullQueue, fallbackQueue],
26+
exports: [bullQueue, fallbackQueue],
1427
};
1528
}
1629
}

apps/nestjs-backend/src/event-emitter/event-job/fallback/fallback-queue.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export class FallbackQueueService implements OnModuleInit {
1616
) {}
1717

1818
async onModuleInit() {
19+
this.logger.debug('FallbackQueueService init');
1920
this.collectionProcess();
2021
}
2122

apps/nestjs-backend/src/features/attachments/attachments-table.processor.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { InjectQueue, Processor } from '@nestjs/bullmq';
1+
import { InjectQueue, Processor, WorkerHost } from '@nestjs/bullmq';
22
import { Injectable, Logger } from '@nestjs/common';
33
import { UploadType } from '@teable/openapi';
44
import { Queue } from 'bullmq';
@@ -24,12 +24,15 @@ export const ATTACHMENTS_TABLE_QUEUE = 'attachments-table-queue';
2424

2525
@Injectable()
2626
@Processor(ATTACHMENTS_TABLE_QUEUE)
27-
export class AttachmentsTableQueueProcessor {
27+
export class AttachmentsTableQueueProcessor extends WorkerHost {
2828
private logger = new Logger(AttachmentsTableQueueProcessor.name);
29+
2930
constructor(
3031
private readonly attachmentsStorageService: AttachmentsStorageService,
3132
@InjectQueue(ATTACHMENTS_TABLE_QUEUE) public readonly queue: Queue<IRecordImageJob>
32-
) {}
33+
) {
34+
super();
35+
}
3336

3437
public async process(job: Job<IRecordImageJob>) {
3538
const { tableId, attachmentItem } = job.data;

0 commit comments

Comments
 (0)