三个经典消息中间件的比较 下载本文

内容发布更新时间 : 2024/6/10 4:48:33星期一 下面是文章的全部内容请认真阅读。

三个经典消息中间件的比较

对于消息中间件,绝大多数熟悉的是 MQ(IBM公司出品),这是目前使用最广泛的中间件产品。还有两个也比较流行,他们是JMS和RV。JMS即JAVA消息服务(Java Message Service)应用程序接口是一个JAVA平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信,是一个与具体平台无关的API。TIBCO Rendezvous(或称为TIBCO RV)也是一种中间件,具有发布/订阅(Publish/Subscribe)、基于主题寻址(Subject-Based Addressing) 和自定义数据信息(Self-Describing Data Messages)等专利技术功能,使不同应用平台上的信息在一个共享的虚拟总线Information Bus(TIB)上进行传输交换。

先总结一下消息中间件的功能,以上的三类中间件都实现了这些功能。 ?? 实现消息的异步发送接收,发布订阅,使得两端的应用解耦(减少或解除

应用程序之间的耦合度)。 ??实现消息持久化机制,保证消息可靠性传输。 ??优化网络传输,支持断点续传。 1、区别之是否分布式

RV 和 MQ 都是分布式结构的, 和 JMS 消息中间件的星型结构不同。分布式消息中间件的Sever在应用环境里都会部署多个,彼此互联,没有主备之分。JMS消息中间件的应用部署一般都是主备两个Server,消息的发送和接收应用平时和主Server相连,有问题时切换到备 Server,主备Server共用公共的存储设备来保存消息。

2、区别之是否接收端主动

MQ 和 JMS 消息中间件都采用消息接收端主动接收消息的方式。消息从发送端发出后,首先会缓存到Server上,接收端应用发起一个接收消息的请求,Server把消息作为应答返回给接收端。接收端不执行接收动作,消息就会一直在Server上保存。RV 和这两种消息中间件都不同,使用的是发送端主动的消息推送模式。消息从发送端发出后,并不在Server上缓存,Server只做路由把消息推送给消息接收端。消息接收端只要连接上Server,订阅要接收的消息,这些消息就会源源不断地从Server那里推送过来,消息先缓存到接收客户端的队列里,接收端应用再从队列里取消息。RV的最大特点就是把一个数据生产者的数据以最快的速度推送到多个数据消费者那里。RV从金融市场数据系统的需求中产生而来,正是这些特点使得它在证券系统得到最广泛的应用。

3、区别之是否便于一对多分布

MQ 和 JMS 消息中间件在 IP 层都使用点对点的一对一传输方式,而RV在IP层使用的是广播或者组播的一对多方式。使用广播或者组播可以直接实现一对多的发布订阅形式,发布应用(发送端)发布消息到RV网络上,这些消息会广播到网络的每一个节点上,每一个订阅应用(接收端)都会收到这些消息。而MQ和JMS实现一对多发布订阅就要麻烦的很多,都是在Server按消息的Topic(主题)来缓存消息,为每一个订阅者拷贝每一条消息的引用。当所有订阅者都从 Server 上取走某条消息,这条消息才可在Server上删除。

4、区别之是否在传输层使用TCP

MQ和JMS 消息中间件不论是Server和Server的通信,还是Server和Client的通信,在传输层都使用 TCP 协议,保证消息传输连接的可靠性。而RV在Server和Server之间的通信使用了UDP协议,牺牲可靠性来达到高实时性的需求。RV有两种可靠性级别,RV Reliable 和 RVCM 。 RV Reliable 模式使用基于UDP增加了一定可靠机制的TRDP协议,在一定范围内具有消息包的检查和重传机制,保证了一定程度的消息可靠性,但不保证消息不丢失。RVCM 在 RV Reliable 基础上更进一步,在消息级别具有消息确认和重传机制,可以保证消息绝对不丢失。对于长度在 1500个字节以下的消息, RV Reliable 发布消息能达到150万笔消息每秒,接收也能达到50万笔消息每秒,传输消息的性能非常好。

5、区别之是否用Subject做收发端的匹配

RV使用消息的Subject 来做消息发送端和接收端的匹配。RV不在Server端缓存消息,也没有Server端的Queue和Topic。每个消息都有 Subject,Subject格式是多个字符串的串接,没有数目或者长度的限制。比如在市场数据系统里,行情数据消息的Subject里包含金融品种的名字,这样的 Subject 可以有上百万个。消息订阅端可以细到只接收某个市场的某个品种的行情数据,所以RV能使用细粒度的消息分类。MQ和JMS消息中间件在Server端按Queue 和Topic来缓存消息,消息的发送端和接收端按Queue和Topic的名字来匹配。每个Server能创建的Queue和Topic是有限的,这也就限制了使用 MQ和JMS消息中间件构建的应用,这些应用在做消息收发处理的时候只能使用粗粒度的消息分类。

6、区别之中间件结构