我正在尝试将我的nestjs应用程序的cqrs设置与外部消息服务(如Redis)集成。在nestjs的Github上,我找到了一个拉取请求和一个评论,说明从cqrs 7.0版本开始,应该能够将我的查询/事件/命令总线与外部服务集成。
我一直在努力实现这一点,但在nestjs上并没有找到太多关于此主题的信息。我唯一能找到的是一个已过时的配置示例和一个开放主题,用于创建有关如何实现此功能的教程。我设法通过在GitHub上找到的有限帮助来替换默认的发布者和订阅者,但我不太明白如何使用它来连接到外部服务,或者是否这是解决此问题的最佳方法。
如果有人之前已经使用外部消息系统设置过nestjs,能够分享他们的想法或共享如何正确执行此操作的资源,将不胜感激。
我一直在努力实现这一点,但在nestjs上并没有找到太多关于此主题的信息。我唯一能找到的是一个已过时的配置示例和一个开放主题,用于创建有关如何实现此功能的教程。我设法通过在GitHub上找到的有限帮助来替换默认的发布者和订阅者,但我不太明白如何使用它来连接到外部服务,或者是否这是解决此问题的最佳方法。
事件总线
import { RedisEventSubscriber } from '../busses/redisEventSubscriber';
import { RedisEventPublisher } from '../busses/redisEventPublisher';
import { OnModuleInit } from '@nestjs/common';
import { ModuleRef } from "@nestjs/core";
import { CommandBus, EventBus as NestJsEventBus } from "@nestjs/cqrs";
export class EventBus extends NestJsEventBus implements OnModuleInit {
constructor( commandBus: CommandBus, moduleRef: ModuleRef) {
super(commandBus, moduleRef);
}
onModuleInit() {
const subscriber = new RedisEventSubscriber();
subscriber.bridgeEventsTo(this._subject$);
this.publisher = new RedisEventPublisher();
}
}
Publisher
export class RedisEventPublisher implements IEventPublisher {
publish<T extends IEvent = IEvent>(event: T) {
console.log("Event published to Redis")
}
}
订阅者
export class RedisEventSubscriber implements IMessageSource {
bridgeEventsTo<T extends IEvent>(subject: Subject<T>) {
console.log('bridged event to thingy')
}
}
如果有人之前已经使用外部消息系统设置过nestjs,能够分享他们的想法或共享如何正确执行此操作的资源,将不胜感激。