一、选择消息队列的基本标准

不同的消息队列产品在功能特性方面是各有优劣的,但是我们在选择的时候应尽量保证一个通用的最低标准。

1.必须是开源的产品

开源很重要,如果在使用该产品时遇到了影响业务的bug,可以通过修改源代码来进行修复。否则就只能等待开发者发布下一个版本了。

2.必须是近年来比较流行且有一定社区活跃度的产品

流行的好处是我们遇到的bug会比较少,其次,流行的产品与周边生态系统会有比较好的集成和兼容。例如flink内置了kafka的data source,使用kafka很容易作为flink的数据源开发流计算应用。

3.必须包括几个重要的特性

  • 消息的可靠传递,确保不丢消息。
  • 支持集群。
  • 具备足够好的性能。

二、不同的消息队列对比

对于消息队列来说,主要有两种模型:点对点队列模型发布/订阅模型二者的最大区别在于一份消息数据能否被消费多次的问题。

点对点队列模型

发布/订阅模型

实际上在发布/订阅模型中,如果只有一个订阅者,那么它和队列模型基本是一样的。也就是说,发布/订阅模型在功能层面上是可以兼容队列模型的

1.RabbitMQ

优点

  • 轻量级、迅捷,容易部署和使用,开箱即用;
  • 是少数支持AMQP协议的消息队列之一;
  • ProducerQueue之间增加了一个Exchange模块(可以理解为交换机),可以自由实现路由规则,使得路由配置更加灵活;
  • 支持的编程语言是消息队列中最多的,如果开发的系统使用的是冷门编程语言,可以找到对应的RabbitMQ客户端。

缺点

  • 对消息堆积的支持不好。在它的设计理念中,消息队列是一个管道,不应当大量堆积消息。所以当消息大量积压时,会导致性能急剧下降。
  • 相比其他消息队列性能较差。每秒可以处理几万到十几万消息,不过如果要求更高则应该选择其他消息队列。
  • 使用Erlang语言开发,不易进行维护。Erlang语言不易学,很难对RabbitMQ进行扩展和二次开发。

RabbitMQ使用的是队列模型,它通过配置Exchange模块来将消息投放到多个队列,来实现发布/订阅模式

2.RocketMQ

优点

  • 阿里内部双11使用,性能、可靠性、稳定性都值得信赖,每秒处理几十万条消息。
  • 中文社区比较活跃。
  • 使用java开发,易于对其进行扩展和二次开发。
  • 收到消息后直接发送,响应时延很低,可以做到毫秒级别。

缺点

  • 作为国产消息队列,在国际上没有那么流行,与周边生态系统的集成和兼容稍差。

RocketMQ使用的是发布/订阅模型,通过消费者组来实现对消息的重复消费。同一个消费者组中的消费者只能消费不同的队列,不同消费者组中的消费者可以消费同一队列。

3.Kafka

优点

  • 与周边生态系统兼容性最好,尤其在大数据和流计算领域,所有相关开源软件系统都会优先支持kafka。
  • 在数据可靠性、稳定性和功能特性等方面可以满足绝大多数场景需求。
  • 异步收发的性能是三者中最好的,但是与RocketMQ没有量级上的差异。
  • 使用java和scala进行开发。

缺点

  • 不太适合在线业务场景。由于kafka是批量发送数据的,所以在消息数量不是很多时,时延反而比较高。

kafka同样使用发布/订阅模型,它同样通过消费者组实现重复消费,不过RocketMQ中的队列(Queue)在kafka中称为分区(Partition)。

4.Pulsar

新兴的开源消息队列,采用存储和计算分离的设计,成熟度还没有很高。

5.ActiveMQ

老一代消息队列,逐渐淘汰。

【消息队列笔记】chp2-如何选择消息队列相关推荐

  1. Windows消息机制学习笔记(一)—— 消息队列

    Windows消息机制学习笔记(一)-- 消息队列 基本概念 实验一:使用代码画出最简单窗口 第一步:编译并运行以下代码 第二步:查看运行结果 第三步:使用其它窗口对其进行覆盖,观察效果 总结 消息队 ...

  2. 消息队列和多线程的选择

    为什么发送邮件要使用消息队列而不是多线程? 1.消息队列和多线程应该怎么选择呢? 可靠性要求高时选择消息队列:消息队列和多线程两者并不冲突,多线程可以作为队列的生产者和消费者. 使用外部的消息队列时, ...

  3. SpringBoot笔记十四:消息队列

    [TOC] 什么是消息队列 消息队列就是消息存储的容器,Java里面有两种 JMS:Sun公司出品,有两种模式,点对点和发布订阅. AMQP:消息队列的一个协议,其实现有RabbitMQ,stormM ...

  4. SpringCloud笔记(四)消息队列

    消息队列 经过前面的学习,我们已经了解了我们之前的技术在分布式环境下的应用,接着我们来看最后一章的内容. 那么,什么是消息队列呢? 我们之前如果需要进行远程调用,那么一般可以通过发送HTTP请求来完成 ...

  5. 学习笔记(二) 消息队列

    学习了新的知识,记录一下,以下均为个人理解. 消息队列 我们为什么要使用消息队列,消息队列有什么好处呢? 在现实生活中,一个操作往往会引起系统的一系列反应,但这些反应有的可能并不是我需要去关心的核心操 ...

  6. win 32学习笔记(三) 消息队列

    抓取消息: GetMessage:从系统获取消息,将消息从系统中移除,阻塞函数.当系统无消息时,会等候下一条消息. PeekMessage:以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函 ...

  7. RabbitTMQ实战 高效部署分布式消息队列笔记

    一.概念部分 1.各种常见MQ比较 ActiveMQ性能和稳定性较差 适用于中小型企业 kaffka不支持事务,对消息的重复.丢失.错误没有严格要求 性能最高 内存存储 RocketMQ java开发 ...

  8. kafka消息队列-笔记

    1  什么是消息 在应用系统之间,传递的数据,叫做消息: 2  常见消息队列 标准的消息队列实现: 主要基于pub/sub publish .subscribe发布与订阅模型 RabbitMQ:rab ...

  9. 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性

    [重难点][RabbitMQ 02]如何避免消息重复投递和消息重复消费.如何防止消息丢失.如何保证消息的顺序性.如何保证消息队列的可用性 文章目录 [重难点][RabbitMQ 02]如何避免消息重复 ...

最新文章

  1. 32岁的老程序员面试没通过,一问原因,挺突然的...
  2. tf.boolean_mask
  3. c语言通用Makefile
  4. Discuz添加自定义模板广告
  5. Java PipedOutputStream connect()方法与示例
  6. Linux——线程使用及互斥量
  7. java 链表 最小堆优先级队列_Java集合细说
  8. HDOJ 1021-1025
  9. zTree加Layui 实现增加和删除,有子节点不允许删除
  10. linux之cp强制复制文件
  11. [ZJOI2012]灾难(建图)
  12. cisco 的网络地址转换技术(NAT)
  13. zk和redis分布式锁比较
  14. 【软件开发】【项目管理】项目管理那些事儿之那些权力
  15. 天堂2单机版如何架设mysql_天堂2单机版 L2J-som-rotm 安装全过程及常用工具 一步到位...
  16. Js分割字符串(单个分割符、多个分割符、正则)
  17. 《陶哲轩实分析》阅读
  18. 腾达无线路由器怎么建立服务器,腾达无线路由器网关和域名服务器
  19. 【Leetcode】| Largest Number
  20. sql python excel_数据技能篇(EXCEL,SQL,Python)

热门文章

  1. vue 独享路由守卫
  2. 长沙学院计算机专业老师李彬,长沙学院2007-2008模具CADCAM_04机本教案【荐】.doc...
  3. cgb2110-day13
  4. RBM受限玻尔兹曼机的一点理解
  5. 未来互联网时代的制造业
  6. 一元注册cn域名与造网’运动'
  7. 工商管理如何利用计算机思维,论述工商管理人才素质的重要性
  8. 智慧路灯商业模式分析:智慧灯杆如何盈利?12项盈利模式汇总
  9. 大数据面前无隐私 到底谁才是老大哥
  10. 球球大作战(Python)