基于路由的消息传输系统(3)

    前两天看了Erlang语言的简介,觉得Erlang语言的运行机制和消息系统有些类似,从技术上来说,什么可以理解为Erlang运行环境就是构建在一个消息系统之上的。
消息队列的种类
    消息系统的核心概念就是基于消息队列的生产者/消费者模式,不同类型的消息队列对应不同的生产者和消费者及其派发机制。派发策略包括消息复制方式、消息异常处理策略、触发机制等。为描述方便,下面是用更容易理解的入口/出口来代替生产者/消费者。消息系统可以被理解为是由定义了不同入口、出口程序及其触发机制的不同实现方式的消息队列组成的。
    客户端消息队列。入口和出口都是应用客户端。

    主题队列/订阅队列。主题队列的入口是主题发布者,主题队列的出口和订阅队列的入口是主题消息派发程序,在这里主题消息被再次复制、派发至订阅队列。订阅队列出口是最终的应用客户端的订阅者。

    传输队列。入口是远程消息。出口是传输模块。
    命令队列。入口是命令请求消息,出口是消息系统的命令处理程序。整个消息系统内部的模块之间、不同节点之间的交互都可以通过命令队列来完成。
    事件队列/触发队列。入口是消息系统产生的事件消息,出口可以是应用客户端,也可以是系统内部个事件监听程序,出口程序可以定义成自动触发运行(触发队列)。
    消息系统的几乎所有的内部交互功能和网络节点之间的交互、信息传播,都可以通过命令队列和事件队列来完成。包括系统配置、管理、监控,分布式主题订阅信息传播、(动态)路由信息传播、集群管理等。由于消息系统本身的特点,这些功能都天然的支持远程访问能力。当然这是一个理想化的模型,有点微内核的概念。现有的MQ产品都只是部分功能是通过自身的消息队列实现的,主要是系统配置和管理功能。其他的,尤其是涉及网络交互的功能,大多数还是使用了专门的通讯协议和交互机制。

    从上面的分析可以总结出消息系统的最基础、核心的流程可以简单概括为
  消息->路由->消息队列->消息处理。无论是消息系统对外提供的功能还是消息系统内部的功能,大多可以以此为基础。举个例子:一个远程消息的处理过程,首先路由系统根据消息目的地和系统路由信息选择一个跟消息目的地关联的传输队列。而该队列的出口的处理程序是传输代理程序,传输代理最终把该消息通过网络传输至下一个路由节点。

猜你喜欢

转载自taolei0628.iteye.com/blog/1154706