Open zhangfisher opened 1 year ago
malagu应该内置一个Eventbus作为基础能力,用来为模块与模块之间的提供一种高效、易用的通讯机制,帮助模块与模块之间实现松耦合。
@malgu@eventbus应该具备以下能力:
@malgu@eventbus
发布订阅功能 模块可以按需要订阅框架或者其他模块的发布的消息
全局消息广播
点对点通讯
主要特性应该包括:
在总线内部,每一个模块均需要具备一个地址标识,可以是模块id之类,只需要全局唯一即可。 模块地址应作为模块通讯的
interface Message{ id:number; // 可以是自增值,由框架产生 from:string; // 消息发送者 to?:string; // 消息接收者,仅在点对点时有用 sid?:number meta:{ forwards:number [key:string]: string | number | booean } payload:any // 消息负载 }
meta供应用层扩展提供一些额外的数据,特别有用。比如MQTT模块可以在meta中提供一些topic数据;TCP模块可以提供ip地址之类的。
meta
MQTT模块
TCP模块
forwards用来记录消息在总线内部流转的次数,当经总线转发一次就+1,总线可以设定一个最大forwards值,用来用来防止消息回路时使用。
forwards
sid用来供模块之间进行会话时标识消息使用,当模块与模块之间需要进行多次通讯时有用
sid
总线发布的消息主题应支持层次结构,例a/b/c之类的,最好支持通配符。
前端也可以向后端订阅?
这里有个 nestjs 的实现,我们可以参考:https://github.com/nestjs/cqrs/blob/master/src/event-bus.ts
malagu应该内置一个Eventbus作为基础能力,用来为模块与模块之间的提供一种高效、易用的通讯机制,帮助模块与模块之间实现松耦合。
@malgu@eventbus
应该具备以下能力:发布订阅功能 模块可以按需要订阅框架或者其他模块的发布的消息
全局消息广播
点对点通讯
主要特性应该包括:
在总线内部,每一个模块均需要具备一个地址标识,可以是模块id之类,只需要全局唯一即可。 模块地址应作为模块通讯的
meta
供应用层扩展提供一些额外的数据,特别有用。比如MQTT模块
可以在meta
中提供一些topic数据;TCP模块
可以提供ip地址之类的。forwards
用来记录消息在总线内部流转的次数,当经总线转发一次就+1,总线可以设定一个最大forwards
值,用来用来防止消息回路时使用。sid
用来供模块之间进行会话时标识消息使用,当模块与模块之间需要进行多次通讯时有用总线发布的消息主题应支持层次结构,例a/b/c之类的,最好支持通配符。
前端也可以向后端订阅?