轻巧易用的消息中间件VMQ开发日志1

calvinwilliams 发布于 2014/06/03 00:19
阅读 184
收藏 0
    说到消息中间件,一般都会想到广泛使用的IBM MQ,其它的诸如Tuxedo等都已没落,国内似乎没有特别出色的产品,曾经用过TongLinkQ,唯一留给我深刻印象的只有繁琐的配置和一些BUG。开源世界里的消息中间件比较有名的如ZeroMQ还不错,但是它还是遵循TCP的侦听、连接模型来设计的,只不过实现了数据持久层。
    当然,从广义角度来讲,任何能传输消息的与应用解耦的都是消息中间件,如Apache、Nginx(B/S结构,其实也是C/S结构)。但是,我理解的消息中间件的精准定义(狭义),从来都是这样的:
    应用
    * 对于应用来讲,无需关心消息系统的物理结构,应用们只需知道自己正吸附在一个虚拟的逻辑队列上交换消息就可以了。
    * 消息中间件只提供API(函数或类)作为应用与队列之间的唯一接口,不假设不决定不干涉应用的代码结构和软件架构。一个反例是某消息中间件要求应用只提供函数挂接在自己的进程框架中,我称之为应用服务器而非消息中间件;另一个反例是某消息中间件竟然在应用close(0)后工作异常,我称之为2。
    消息中间件
    * 既然是系统软件,核心必须用C语言编写,市面上有大量用JAVA或脚本语言编写的消息中间件,充其量只是玩具,就像操作系统或数据库等用JAVA或脚本语言编写一样缺乏严肃性。
    * 消息系统的结构应该是对称的,如"C-Q-C",本地队列上吸附着多个应用,或者"C-Q-S-network-S-Q-C",本地队列用网络协议连接在一起。
    其它诸如易用性、数据持久化实现技术、跨平台等都是细节问题,因厂商能力而定。
    所有满足我定义的消息中间件产品只有IBM MQ等寥寥几个,而且不幸的是我最喜欢的IBM MQ是付费使用的,于是乎,我一直很想自己研发一个并完整的分享给开源世界。
    
    考虑了几天,我的目标如下:
    * 因为前期是一个人开发,还是以轻巧实现为主,参考我喜欢的IBM MQ的结构"C-Q-S-network-S-Q-C",但会设计的比它更易用。因为轻量实现,性能必须更高。
    * 跨主流平台,Linux、类UNIX、WINDOWS。
    * 后续支持多种编程语言接口(需要广大网友支援)
    
    设计如下:
    * 定义队列操作原语
        创建队列、销毁队列
        打开队列、关闭队列
        发送消息、接收(订阅)消息(堵塞或非堵塞或以描述字方式提供给应用便于融入应用自己的事件管理,如select、epoll)
        广播消息
    * 定义消息机制
        消息选项(消息类型、优先级、超时等)
        文件传输
        安全机制(加解密、加验签)。
    * 先实现一个内存队列,映射到存储文件上实现简单的数据持久化;然后在此基础上实现一组消息交换机制;最后实现自适应通讯站网络,用网络协议连接各个队列。本地使用无需启动通讯站。
   
    (持续开发中,目前已完成内存队列的开发)

加载中
返回顶部
顶部