最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Nestjs CQRS

运维笔记admin11浏览0评论

Nestjs CQRS

Nestjs CQRS

我正在尝试在我的nestjs应用中使用事件。

但是,当我尝试触发命令时,却显示CommandHandlerNotFoundException

我有message-bus.module

@Module({
    imports: [CqrsModule],
    providers: [
        MessageBusLocalService,
        StartWorkflowHandler
    ],
    exports: [MessageBusLocalService]
})
export class MessageBusModule {
}

message-bus-local.service

@Injectable()
export class MessageBusLocalService {

    constructor(private readonly commandBus: CommandBus, private eb: EventBus) {
    }

    startWorkflow(workflowId: string, payload: any) {
        return thismandBus.execute(
            new StartWorkflowCommand(workflowId, payload)
        );
    }
}

start-workflow.handler

@CommandHandler(StartWorkflowCommand)
export class StartWorkflowHandler implements ICommandHandler<StartWorkflowCommand> {
    constructor() {}

    async execute(command: StartWorkflowCommand) {
        console.log('Workflow started', command.jobId);
        return true;
    }
}

我正在尝试引导应用程序时触发命令:

    const app = await NestFactory.create(ApplicationModule);

    const service = app.get(MessageBusLocalService);
    try {
        const c = await service.startWorkflow('abcde', {just: "test"});
        console.log('And returned', c);
    } catch (e) {
        console.error(e)
    }

并且...尽管我相信已声明CommandHandlerNotFoundException,但我到了那里。我做错了什么?

提前感谢。

回答如下:

您的MessageBusModule不会重新导出处理程序,因此它们在app.module级别上不是“可见的”(至少这是我自己理解的)]

我有类似的情况:

const commands = [NewOrder, ChargeForOrder]
const events = [ChargeOrder, OrderProcessed]
const sagas = [AdjustWalletFunds]

@Module({
  imports: [
    CqrsModule,
    WalletsModule,
    TypeOrmModule.forFeature([...]),
  ],
  providers: [..mands, ...events, ...sagas],
  exports: [CqrsModule, ..mands, ...events, ...sagas],
})
export class RxModule {}

因此,假设您将MessageBusModule导入主app.module中,请尝试以下操作:

@Module({
    imports: [CqrsModule],
    providers: [
        MessageBusLocalService,
        StartWorkflowHandler
    ],
    exports: [MessageBusLocalService, StartWorkflowHandler]
})
export class MessageBusModule {
}

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论