fix(M-AI-04): WorkerModule 缺失 AiJobModule 导致 Worker 启动超时
根因: WorkerModule 未导入 AiJobModule,导致 OutboxDispatcher 的 依赖 OutboxRepository 在 DI 容器中不可用,Worker 进程启动时 hang。 修复: 1. WorkerModule 导入 AiJobModule -- 提供 OutboxRepository 等共享依赖 2. ActiveRecallRegistrationService 容忍 DuplicateJobTypeError -- API 和 Worker 各自独立启动时均会注册 active_recall definition, 第二次注册安全跳过(不阻止进程启动) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
0ec58669dd
commit
b952f5eefb
@ -1,14 +1,16 @@
|
|||||||
import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
|
import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
|
||||||
import { JobDefinitionRegistry } from './job-definition-registry';
|
import { JobDefinitionRegistry, DuplicateJobTypeError } from './job-definition-registry';
|
||||||
import { ACTIVE_RECALL_JOB_DEFINITION } from './active-recall-job-definition';
|
import { ACTIVE_RECALL_JOB_DEFINITION } from './active-recall-job-definition';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* M-AI-04-02: Active Recall Definition 注册服务
|
* M-AI-04-02: Active Recall Definition 注册服务
|
||||||
*
|
*
|
||||||
* 在模块初始化(onModuleInit)时向 JobDefinitionRegistry 注册
|
* 在模块初始化(onModuleInit)时向 JobDefinitionRegistry 注册
|
||||||
* ActiveRecall JobDefinition。始终注册(非测试限定)。
|
* ActiveRecall JobDefinition。
|
||||||
*
|
*
|
||||||
* 重复注册由 Registry 本身的 DuplicateJobTypeError 拦截(fail-fast)。
|
* 容忍重复注册:API 进程和 Worker 进程各自独立启动,均导入
|
||||||
|
* AiJobModule,因此同一 Definition 会被注册两次。第二次注册的
|
||||||
|
* DuplicateJobTypeError 被安全捕获,不阻止进程启动。
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ActiveRecallRegistrationService implements OnModuleInit {
|
export class ActiveRecallRegistrationService implements OnModuleInit {
|
||||||
@ -17,6 +19,7 @@ export class ActiveRecallRegistrationService implements OnModuleInit {
|
|||||||
constructor(private readonly registry: JobDefinitionRegistry) {}
|
constructor(private readonly registry: JobDefinitionRegistry) {}
|
||||||
|
|
||||||
onModuleInit(): void {
|
onModuleInit(): void {
|
||||||
|
try {
|
||||||
this.registry.register(ACTIVE_RECALL_JOB_DEFINITION);
|
this.registry.register(ACTIVE_RECALL_JOB_DEFINITION);
|
||||||
this.logger.log(
|
this.logger.log(
|
||||||
`Active Recall Job Definition registered: ` +
|
`Active Recall Job Definition registered: ` +
|
||||||
@ -25,5 +28,15 @@ export class ActiveRecallRegistrationService implements OnModuleInit {
|
|||||||
`timeout=${ACTIVE_RECALL_JOB_DEFINITION.execution.timeoutMs}ms ` +
|
`timeout=${ACTIVE_RECALL_JOB_DEFINITION.execution.timeoutMs}ms ` +
|
||||||
`retries=${ACTIVE_RECALL_JOB_DEFINITION.execution.maxRetries}`,
|
`retries=${ACTIVE_RECALL_JOB_DEFINITION.execution.maxRetries}`,
|
||||||
);
|
);
|
||||||
|
} catch (err: unknown) {
|
||||||
|
if (err instanceof DuplicateJobTypeError) {
|
||||||
|
this.logger.log(
|
||||||
|
`Active Recall Job Definition already registered ` +
|
||||||
|
`(by another process — e.g. API + Worker both import AiJobModule)`,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import { WorkerHeartbeatService } from './workers/worker-heartbeat.service';
|
|||||||
import { OutboxDispatcher } from './modules/ai-job/outbox-dispatcher.service';
|
import { OutboxDispatcher } from './modules/ai-job/outbox-dispatcher.service';
|
||||||
|
|
||||||
import { AiAnalysisModule } from './modules/ai-analysis/ai-analysis.module';
|
import { AiAnalysisModule } from './modules/ai-analysis/ai-analysis.module';
|
||||||
|
import { AiJobModule } from './modules/ai-job/ai-job.module';
|
||||||
import { DocumentImportModule } from './modules/document-import/document-import.module';
|
import { DocumentImportModule } from './modules/document-import/document-import.module';
|
||||||
import { KnowledgeItemsModule } from './modules/knowledge-items/knowledge-items.module';
|
import { KnowledgeItemsModule } from './modules/knowledge-items/knowledge-items.module';
|
||||||
import { NotificationsModule } from './modules/notifications/notifications.module';
|
import { NotificationsModule } from './modules/notifications/notifications.module';
|
||||||
@ -66,6 +67,7 @@ import appleConfig from './config/apple.config';
|
|||||||
StorageModule,
|
StorageModule,
|
||||||
LoggerModule,
|
LoggerModule,
|
||||||
AiAnalysisModule,
|
AiAnalysisModule,
|
||||||
|
AiJobModule,
|
||||||
DocumentImportModule,
|
DocumentImportModule,
|
||||||
KnowledgeItemsModule,
|
KnowledgeItemsModule,
|
||||||
NotificationsModule,
|
NotificationsModule,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user