fix: break circular dependency between EventBusService and QueueService
Some checks failed
Deploy API Server / build-and-deploy (push) Has been cancelled

This commit is contained in:
WangDL 2026-05-23 19:47:40 +08:00
parent 99d03bb26c
commit ad0e4f397a
2 changed files with 6 additions and 5 deletions

View File

@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable, Logger, Optional, Inject, forwardRef } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { QueueService } from '../../infrastructure/queue/queue.service';
import { BaseDomainEvent } from '../events/base-domain.event';
@ -12,7 +12,7 @@ export class EventBusService {
constructor(
private readonly eventEmitter: EventEmitter2,
private readonly queue: QueueService,
@Optional() @Inject(forwardRef(() => require('../../infrastructure/queue/queue.service').QueueService)) private readonly queue?: any,
) {}
/** Sync: process-in-memory, low latency, fire-and-forget */
@ -24,6 +24,7 @@ export class EventBusService {
/** Async: persistent via BullMQ, retry + DLQ */
async publishAsync(event: BaseDomainEvent): Promise<string> {
if (!this.queue) return;
const job = await this.queue.add('domain-events', {
eventType: event.eventType,
eventId: event.eventId,

View File

@ -1,4 +1,4 @@
import { Injectable, Logger, Optional } from '@nestjs/common';
import { Injectable, Logger, Optional, Inject, forwardRef } from '@nestjs/common';
import { InjectQueue } from '@nestjs/bullmq';
import { EventBusService } from '../../common/event-bus/event-bus.service';
import { BaseDomainEvent } from '../../common/events/base-domain.event';
@ -16,7 +16,7 @@ export class QueueService {
private readonly logger = new Logger(QueueService.name);
constructor(
private readonly eventBus: EventBusService,
@Optional() private readonly eventBus?: any,
private readonly prisma: PrismaService,
@InjectQueue(QUEUE_AI_ANALYSIS) private readonly aiQueue: Queue,
@InjectQueue(QUEUE_DOCUMENT_IMPORT) private readonly importQueue: Queue,
@ -30,7 +30,7 @@ export class QueueService {
// Log to DB
await this.prisma.taskLog.create({ data: { queueName, jobId: job.id || '', status: 'enqueued', payload: JSON.parse(JSON.stringify(data)) } }).catch(() => {});
this.eventBus.publish(new (class extends BaseDomainEvent { eventType = 'task.enqueued'; queueName: string; jobId: string; constructor(q: string, j: string) { super(); this.queueName = q; this.jobId = j; } })(queueName, job.id || ''));
this.eventBus?.publish(new (class extends BaseDomainEvent { eventType = 'task.enqueued'; queueName: string; jobId: string; constructor(q: string, j: string) { super(); this.queueName = q; this.jobId = j; } })(queueName, job.id || ''));
this.logger.log(`Job ${job.id} added to ${queueName}`);
return job;
}