消息管道模型

为了方便消息订阅和消息处理,ClownFish提供了一种称为消息管道的开发模型,如下图所示:

xx

此模型有以下优点:

  • 统一模型:支持一套消息处理代码,订阅不同的消息服务(消息来源),可理解为 与消息服务解耦
  • 功能增强:提供完善的日志和监控,支持重试处理,支持异常处理
  • 简化代码:
    • 隐藏所有技术差异:
      • 订阅模式差异
      • 线程模型差异
      • 订阅者数量管理
      • 提交方式
      • 序列化等等细节
    • 消息处理只负责实现业务逻辑即可。
  • 规范代码:将消息处理划分为多个阶段,避免代码风格迥异



消息订阅者

  • 消息订阅者用于从消息队列服务中订阅(获取)消息,
  • 订阅者接收到消息后,将消息发送到 消息管道,然后再交给 消息处理器 来处理
  • 不同的队列来源 对应不同的订阅者(适配器模式)
  • Nebula已内置了多种消息订阅者(适配器)
  • 实际开发过程感知不到 消息订阅者 的存在,因为不需要与它交互



消息管道

消息处理管道的作用在于:

  • 屏蔽各消息服务的差异
  • 规范消息处理过程
  • 支持错误重试
  • 支持调用统计
  • 支持性能监控
  • 支持异常处理
  • 产生日志(4类)

管道中的消息处理阶段(消息处理器提供了对应的虚方法)

  • ValidateMessage
  • PrepareMessage
  • SaveMessage
  • ProcessMessage
  • AfterProcess
  • SaveState
  • OnEnd
  • OnError



消息处理器

无论使用哪种队列服务,所有消息最终是由 MessageHandler 来处理。