typescript - CommandBus 职责,redis 或 kafka
问题描述
您好我正在尝试开始研究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的实现就足够了?有人可以帮我怎么做吗?如果可能的话,我将不胜感激
解决方案
推荐阅读
- javascript - Express with FIREBASE 我得到 TypeError: Cannot read property 'trim' of undefined
- html - 如何生成二维码中的html表单数据?
- java - 返回客户异常对象时更改 responseStatusCode
- c++ - 在 C++ 中修改位图时流式传输
- npm - 生成 Gatsby 启动器时未找到锐利的预建库
- c# - 弹出后值不离开堆栈(堆栈
) - java - 实现一个模拟数据库
- arrays - update_post_meta 添加来自 meta_value 数组的最新数据
- user-interface - 如何限制列内多个文本字段的宽度?用 SizedBox 包裹后者不起作用
- vue.js - Vuetify v-tabs 长时间切换标签