【发布时间】:2021-04-28 16:05:54
【问题描述】:
你好,我正在尝试开始学习es,微服务然后我想了解命令总线我基本上认为他的职责只是执行命令处理程序? 一定要排队吗? 你能把kafka做成命令总线或者redis吗? 我有一个简单的命令总线实现,但我想实现一个命令总线,以便为 3 个微服务使用相同的命令总线,按照我的做法,我必须为每个 ms 提供一个命令总线,并注册命令和每个微服务的命令处理程序
使用打字稿实现:
export class CommandBus<Command extends ICommand = ICommand>
implements ICommandBus<Command> {
private handlers = new Map<string, ICommandHandler<Command>>()
public execute<T extends Command>(command: T): Promise<any> {
const handler = this.handlers.get(command.constructor.name)
if (!handler) throw new Error(``)
return handler.execute(command)
}
public register(
data: { commandHandler: ICommandHandler; command: Type<ICommand> }[],
): void {
data.forEach(({command,commandHandler}) => {
this.bind(commandHandler, command.name)
})
}
private bind<T extends Command>(handler: ICommandHandler<T>, name: string) {
this.handlers.set(name, handler)
}
}
我想知道使用 kafka 为所有微服务只有一个命令总线的最佳选择是什么?还是使用redis的实现就足够了?有人可以帮我怎么做吗? 如果可能的话,我会非常感激的例子
【问题讨论】:
-
在cqrs.nu 上查看我维护的示例 CQRS/ES 代码
标签: typescript apache-kafka redis event-sourcing