理论教育 常用的消息队列系统对比

常用的消息队列系统对比

时间:2023-11-24 理论教育 版权反馈
【摘要】:换句话说,通用的消息队列系统对单一职责的消费者生产者模型比较适用,但是在实际的企业中,要进行多系统之间的消息通信,就会用到消息总线的概念。因此,在公司生产中,工程师主要是基于已有的开源的消息队列系统来封装自己业务需求的消息总线。

常用的消息队列系统对比

消息队列系统一个独特的设计特点就是生产者跟消费者松耦合特性,这种设计优势也仅只能用于单一业务的消息队列处理。换句话说,通用的消息队列系统对单一职责的消费者生产者模型比较适用,但是在实际的企业中,要进行多系统之间的消息通信,就会用到消息总线的概念。消息总线是在消息队列系统提供的技术支撑上,封装出来的更适合消息交互的实际业务场景。而消息队列系统则只提供一种消息通信的实现机制(消息的读写、消息的发送、消息缓存数据压缩等)。因此,在公司生产中,工程师主要是基于已有的开源的消息队列系统来封装自己业务需求的消息总线。这样就省去了自己开发类似的消息队列或者MessageBroker的成本和工作量。为了更好地运用消息队列,大家对比一下常用的消息队列系统,如表13-1所示。

表13-1 常用的消息队列(Message Queue)功能对比

978-7-111-54169-1-Chapter13-3.jpg(www.daowen.com)

  以上都是开源的消息队列系统,其中RabbitMQ除了本身支持很多协议外,也是一个重量级开源消息队列,特别适合企业级开发,同时也实现了Broker架构,也就是说在发送消息给客户端的时候必须先在中心队列排队;ZeroMQ号称最快的消息队列系统,特别适合吞吐量高的应用场景,开发工程师可以运用ZeroMQ来实现RabbitMQ不擅长的复杂/高级的队列,但是要组合多种技术架构,应用的复杂度也比较高。

其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据流的传输,Storm 0.9.0之后的版本数据传输模块同时支持Netty和ZeroMQ;ActiveMQ既类似ZeroMQ,也类似RabbitMQ,可以用少量代码高效地实现高级应用场景;Kafka的一个独特的特点就是支持动态扩容,如能在O(1)的系统开销下进行消息持久化,其中Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡,支持Hadoop数据并行加载等。除性能好外,是一个工作良好的非常轻量级的分布式消息系统,Jafka是在Apache Kafka之上孵化而来的,可以说是Kafka的一个升级版本。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈