mac-message 消息组件
基本概念
mac-message使用基于长连接的“推消息”方式实现,具备很高的实时消息处理能力。消息中间件(Message Broker)
消息监控(Message Monitor)
消息发送与接收流程
输入输出适配器
输入适配器通常用于扩展消息服务器的接入与接出协议,比如:编写一个Java socket服务,将收到的报文转换成消息放入消息队列。输出适配器同理,用于将需要发送的消息以不同的渠道和协议向外发送。
输入适配器并没有接口要求,它通过引用localMsgSvc1来实现消息入队。输出适配器则需要实现MessageService接口,并作为收件人被消息中间件在本地直接引用。
由于输入输出适配器与消息broker同在一个JVM中,其效率就比通过网关方式进行协议转换和通讯要高很多。
目标队列(Target Queue)
消息中间件在收到消息后,先检查此队列是否有配置持久化,有则先将消息持久化,再尝试将消息写入内存队列。如果内存队列已满则放弃入队,消息仍然保留在持久化存储中不会丢失,后续再根据恢复策略将消息读出,再次尝试写入内存队列。
整个过程对于客户端来说是同步调用,中间发生异常将抛出异常到客户端
收件人队列(Recipient Queue)
收件人队列是运行期动态创建的,在一个消息Broker实例上,一个收件人对应一个收件人队列,与该收件人的实例数无关。向收件人发送消息成功或失败将产生事件,更新到消息对象的recipients属性上,如果有配置持久化,也会同时进行持久化。
如果该收件人被要求必达,但发送失败,则整个消息发送失败,中间件会进行重发等补偿措施。
消息转换器(Message Converter)
消息转换器用于将基于不同协议的消息对象进行互相转换。过滤与分拣插件(Recipient Finder)
过滤与分拣插件用于动态确定消息的收件人。如果希望过滤此消息(忽略)此消息只需返回空即可。收件人消息签收
消息签收分为三种情况:- 收件人在收到消息时,返回签收消息给中间件。
- 消息中间件在成功将消息发往收件人时返回签收消息给发件人。
- 收件人在收到消息时,返回签收消息给发件人。