消息队列介绍以及对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38120325/article/details/79667729

一、什么是消息队列

消息队列(Message Queue),是分布式系统中重要的组件,主要解决了应用耦合、异步处理、流量削锋等问题。当前主要使用的消息队列有RabbitMQRocketMQActiveMQKafkaZeroMQMetaMq,部分DB类存储系统也可以实现消息队列,本质类似于javajms,主要实现消息对象的接收、存储与发送。

二、消息队列的应用

       消息队列在实际应用中包括:

1.   应用耦合,多个系统需要调用统一接口,对同一参数进行处理,为避免并发调用导致系统压力,导致整个系统失败。之前公司做的电商系统,属于一个伪微服务的系统,只是将几个不是订单处理的系统分离出来,在物流,仓库等多个服务调用订单系统的时候用到ActiveMQ

2.      异步处理,多系统对单一系统中的同一消息都需要进行处理,使用消息队列的广播模式进行并发处理,缩短了时间;

3.      广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;

三、消息队列的模式

         1.点对点模式:消息生产者将消息发送到队列中,然后消息接收者从队列中取出并消费消息,被消费的消息会直接删除,不会出现重复消费;

                   特点是:每个消息只有一个消费者,发送者和消费者没有依赖关系,消费者消费成功之后会响应消息队列,以便删除消息;

扫描二维码关注公众号,回复: 5005518 查看本文章

         2.发布/订阅模式:发布者将A主题的消息发送到消息队列,消费者可以根据主题消费响应的消息,或队列将消息推送给消费者

                   特点:每个消息可以被多个消费者消费,消费者和生产者之间有时间依赖性;为了消费消息,订阅者需要提前订阅该角色主题;

四、接触过的消息队列的对比

         第一个公司做的电商项目中用到了ActiveMQ进行订单处理和秒杀系统的处理,第二个公司使用RabbitMQ作为分布式系统的消息通讯,异步处理和削锋的工具,因为使用,所以调研过MQ,加上RocketMQ是马家的,所以关注了一下,以下是这三个MQ的对比:

ActiveMQ

RabbitMQ

RocketMQ

关注度

成熟度

成熟

成熟

比较成熟

社区

Apache

Mozilla开源社区

Alibaba

社区活跃度

文档

特点

功能齐全,被大量使用

由于Erlang语言的并发能力,使得性能很好

各个环节分布式扩展设计,主从高可用群集;支持上万个队列;多种消费模式;性能很好

开源

开源

开源

开源

语言

Java

Erlang(面向并发编程语言)

Java

Client语言

支持Java

支持Java

支持Java

支持协议

OpenWire、STOMP、REST、XMPP、AMQP

AMQP

自定义的一套,提供了支持JMS客户端的API

持久化

内存,文件,数据库

内存,文件

磁盘文件

事务

支持

不支持

支持

集群和负载均衡

支持

支持

支持

管理页面

一般

部署方式

独立,嵌入

独立

独立

评价

优点:成熟的产品,已经在很多公司得到应用(非大规模场景)。有较多的文档。各种协议支持较好,有多重语言的成熟的客户端;

缺点:根据其他用户反馈,会出莫名其妙的问题,并且会丢消息。其重心放到activemq6.0产品—apollo上去了,目前社区不活跃,且对5.x维护较少; Activemq 不适合用于上千个队列的应用场景

优点:由于erlang语言的特性,mq性能较好;管理界面较丰富,在互联网公司也有较大规模的应用;支持amqp协议,有多中语言且支持 amqp 的客 户端可用。

缺点:erlang语言难度较大。

优点:模型简单,接口易用。在阿里大规模应用。目前支付宝中的余额宝等新兴产品均使用rocketmq。集群规模大概在50台左右,单日处理消息上百亿;性能非常好,可以大量堆积消息在 broker 中;支持多种消费,包括集群消费、广播消费等。开发度较活跃,版本 更新很快。

缺点:产品较新,文档比较缺乏。没有在 mq 核心中去实现 JMS 等接口,对 已有系统而言不能兼容

五、总结

         综合以上来看,三种MQ各有优劣,ActiveMQ和RabbitMQ相对成熟,使用起来略微顺手,网上文档也很多,坑基本上被踩完了,前者使用java写的,学习成本低,后者使用Elang语言比较难以学习,都支持出就花和集群,唯一的是RabbitMQ不支持事务,但是公司现在也用不到这个。RabbitMQ是阿里自己开发的,设计的很强大,但是肯定会偏向阿里的业务,不一定对所有的公司都适合,加上文档少,不是很成熟,没有深厚的技术底蕴,难以放心的使用;总之,技术没有最好的,只有最适合的,贴合自己公司的业务和实际情况选出来的就是最好的!


猜你喜欢

转载自blog.csdn.net/m0_38120325/article/details/79667729