消息管道模型
为了方便消息订阅和消息处理,ClownFish提供了一种称为消息管道的开发模型,如下图所示:
此模型有以下优点:
- 统一模型:支持一套消息处理代码,订阅不同的消息服务(消息来源),可理解为 与消息服务解耦。
- 功能增强:提供完善的日志和监控,支持重试处理,支持异常处理
- 简化代码:
- 隐藏所有技术差异:
- 订阅模式差异
- 线程模型差异
- 订阅者数量管理
- 提交方式
- 序列化等等细节
- 消息处理只负责实现业务逻辑即可。
- 隐藏所有技术差异:
- 规范代码:将消息处理划分为多个阶段,避免代码风格迥异
消息订阅者
- 消息订阅者用于从消息队列服务中订阅(获取)消息,
- 订阅者接收到消息后,将消息发送到 消息管道,然后再交给 消息处理器 来处理
- 不同的队列来源 对应不同的订阅者(适配器模式)
- Nebula已内置了多种消息订阅者(适配器)
- 实际开发过程感知不到 消息订阅者 的存在,因为不需要与它交互
消息管道
消息处理管道的作用在于:
- 屏蔽各消息服务的差异
- 规范消息处理过程
- 支持错误重试
- 支持调用统计
- 支持性能监控
- 支持异常处理
- 产生日志(4类)
管道中的消息处理阶段(消息处理器提供了对应的虚方法)
- ValidateMessage
- PrepareMessage
- SaveMessage
- ProcessMessage
- AfterProcess
- SaveState
- OnEnd
- OnError
消息处理器
无论使用哪种队列服务,所有消息最终是由 MessageHandler 来处理。