消息队列对比

news2025/1/10 20:17:03

目录

什么是消息队列

常用的消息队列工具对比

1 、ActiveMQ

2 、RabbitMQ

3、Kafka

4、 RocketMQ


什么是消息队列

        消息队列是分布式应用间交换信息的重要组件,消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息。所以消息队列可以解决应用解耦、异步消息、流量削锋等问题,是实现高性能、高可用、可伸缩和最终一致性架构中不可以或缺的一环。

        消息队列是分布式系统中重要的中间件,在高性能、高可用、低耦合等系统架构中扮演着重要作用。分布式系统可以借助消息队列的能力,轻松实现以下功能:

  • 解耦,将一个流程的上游和下游拆开,上游专注生产消息,下游专注处理消息。
  • 广播,一个上游生产的消息轻松被多个下游服务处理。
  • 缓冲,应对流量突然上涨,消息队列可以扮演一个缓冲器的作用,保护下游服务使其可以根据实际的消费能力处理消息。
  • 异步,上游发送消息后可以马上返回,下游可以异步处理消息。
  • 冗余,保留历史消息,处理失败或当出现异常时可以进行重试或者回溯防止丢失。

常用的消息队列工具对比

1 、ActiveMQ

  1. ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
  2. ActiveMQ特性如下:
  3. 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  4. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  5. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  6. 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  7. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  8. 支持通过JDBC和journal提供高速的消息持久化
  9. 从设计上保证了高性能的集群,客户端-服务器,点对点
  10. 支持Ajax
  11. 支持与Axis的整合
  12. 可以很容易得调用内嵌JMS provider,进行测试

2 、RabbitMQ

RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

几个重要概念:

  • Broker:简单来说就是消息队列服务器实体。
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  • vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  • producer:消息生产者,就是投递消息的程序。
  • consumer:消息消费者,就是接受消息的程序。
  • channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程,如下:

  1. 客户端连接到消息队列服务器,打开一个channel。
  2. 客户端声明一个exchange,并设置相关属性。
  3. 客户端声明一个queue,并设置相关属性。
  4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。
  5. 客户端投递消息到exchange。

exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

3、Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:

  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。(文件追加的方式写入数据,过期的数据定期删除)
  • 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息
  • 支持通过Kafka服务器和消费机集群来分区消息
  • 支持Hadoop并行数据加载

Kafka相关概念

名称作用
BrokerKafka集群包含一个或多个服务器,这种服务器被称为broker[5]
Topic每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
PartitionParition是物理上的概念,每个Topic包含一个或多个Partition.
Producer负责发布消息到Kafka broker
Consumer消息消费者,向Kafka broker读取消息的客户端。
Consumer Group每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

一般应用在大数据日志处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用。

4、 RocketMQ

RocketMQ是阿里开源的消息中间件,纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,支撑了阿里多次双十一活动。

因为是阿里内部从实践到产品的产物,因此里面很多接口、api并不是很普遍适用。可靠性毋庸置疑,而且与Kafka一脉相承(甚至更优),性能强劲,支持海量堆积。

特性

ActiveMQ

RabbitMQ

Kafka

RocketMQ

PRODUCER-COMSUMER

支持

支持

支持

支持

PUBLISH-SUBSCRIBE

支持

支持

支持

支持

REQUEST-REPLY

支持

支持

-

支持

API完备性

低(静态配置)

多语言支持

支持,JAVA优先

语言无关

支持,JAVA优先

支持

单机呑吐量

万级

万级

十万级

单机万级

消息延迟

-

微秒级

毫秒级

-

可用性

高(主从)

高(主从)

非常高(分布式)

消息丢失

-

理论上不会丢失

-

消息重复

-

可控制

理论上会有重复

-

文档的完备性

提供快速入门

首次部署难度

-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker 镜像和容器

一、简述 win系统常用Ghost技术来做镜像,把系统和系统上安装的应用程序一起打包做备份,在别的电脑上安装这个GHO镜像则会有和源系统一摸一样的系统和应用。 docker功能类似,而且是分层的,在拉取镜像时候可见。 docker镜像拉取下…

4、js - 闭包

1、闭包的概念 闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析: 需要访问的变量会被放到闭包…

用YOLOv5和MobileViTs骨干网络革新目标检测:高效准确AI视觉的未来

目录 一、YOLOv51、YOLOv5介绍2、YOLOV5的整体架构图3、MobileViT介绍 二、YOLOv5与MobileViT的结合1、YOLOv5网络结构回顾2、MobileViT网络结构介绍3、YOLOv5替换骨干网络为MobileViT的优势 三、MobileViT的细节与实现1、ViT与MobileNetV3的结合2、MobileViT网络结构细节3、Mo…

最高奖金100万!第二届广州·琶洲算法大赛火热报名中

第二届广州琶洲算法大赛以“优选AI算法 让世界更智能”为主题,聚焦前沿 AI 技术,推进算法领域的学术交流、人才培养、技术发展及应用,面向算法领域的开发者、创业机构、企事业单位,招募具有原创性、独创性、引领性的算法模型和应用…

c++ 11标准模板(STL) std::map(二)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

【JavaScript】ES6新特性(3)

10. Symbol 使用 Symbol&#xff0c;表示独一无二的值 每个 Symbol 是不一样的 不能进行运算 可以显式调用 toString() 可以隐式转换 boolean <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-eq…

华为OD机试真题 Java 实现【寻找相似单词】【2023Q2 200分】

一、题目描述 给定一个可存储若干单词的字典&#xff0c;找出指定单词的所有相似单词&#xff0c;并且按照单词名称从小到大排序输出。 单词仅包括字母&#xff0c;但可能大小写并存&#xff08;大写不一定只出现在首字母&#xff09;。 相似单词说明&#xff1a; 给定一个…

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…

从C语言到C++_12(string相关OJ题)

上一篇已经讲了string类的接口函数&#xff0c;然后根据查文档刷了一道力扣415字符串相加&#xff0c; 这篇继续跟着查文档来刷力扣题&#xff0c;体会C刷题的方便。 目录 917. 仅仅反转字母 - 力扣&#xff08;LeetCode&#xff09; 代码解析&#xff1a; 387. 字符串中的…

SSRS rdlc报表 一 创建报表

环境 vs2019 fromwork4.5 第一步 安装rdlc报表插件 vs2019使用rdlc&#xff0c;需要安装扩展插件&#xff0c;扩展→扩展管理→联机&#xff0c;搜索rdlc&#xff0c;安装Microsoft RDLC Report Designer&#xff0c;我在安装过程中&#xff0c;安装了很久都没安装成功&…

构建高可用性的核心服务层:Coupang电子商务应用程序的技术实践

随着Coupang电子商务平台用户数量的快速增长&#xff0c;构建一个高可用性的核心服务层成为了关键任务。本文将介绍Coupang如何通过统一的NoSQL数据存储、缓存层和实时数据流等技术和策略&#xff0c;构建一个高可用性的核心服务层&#xff0c;以满足日益增长的数据流量需求&am…

保姆式教学--教室友从买服务器到怎么搭建内网隧道

本文转载于&#xff1a;https://blog.csdn.net/qq_39739740/article/details/127604642 一、购买云服务器 怎么购买&#xff1f; 三个主流厂商&#xff1a;华为云、腾讯云、阿里云 --------拿阿里云举例。 首先第一步、我们要百度搜索 阿里云→进入官网→选择最便宜的服务器&…

python+django音乐推荐网站vue

为此开发了本音乐推介网站 &#xff0c;为用户提供一个基于音乐推介网站&#xff0c;同时方便管理员&#xff1b;首页、个人中心、用户管理&#xff0c;类型信息管理、乐器类型管理、歌曲信息管理、戏曲信息管理、MV专区管理、付费音乐管理、订单信息管理、音乐文件管理、论坛管…

JavaSE基础(七)—— 常用API(String、 ArrayList)

1.API 1.1API概述 什么是API ​ API (Application Programming Interface) &#xff1a;应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需…

阿里云/dev/vda1磁盘空间占满的解决过程

1.查看文件系统系统的占有量 使用df -h查看了下 2.查看本目录占据多少磁盘空间 du -sh 3.在cd /目录下 du -sh查看各个目录占据多少空间 d 然后使用 du -sh *查看具体文件差距多少空间逐一排查最后把占据大的文件删除掉即可.

Elasticsearch:使用字节大小的向量节省空间 - 8.6

作者&#xff1a;Jack Conradson, Benjamin Trent Elasticsearch 在 8.6 中引入了一种新型向量&#xff01; 该向量具有 8 位整数维度&#xff0c;其中每个维度的范围为 [-128, 127]。 这比具有 32 位浮点维度的当前向量小 4 倍&#xff0c;这可以节省大量空间。 你现在可以通…

【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗

文章目录 ⭐️ 赠书 - 《前端工程化&#xff1a;基于Vue.js 3.0的设计与实践》⭐️ 内容简介⭐️ 作者简介⭐️ 精彩书评⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《前端工程化&#xff1a;基于Vue.js 3.0的设计与实践》 ⭐️ 内容简介 本书以Vue.js的3.0版本为核心技术栈&#…

Python自动化办公对每个子文件夹的Excel表加个表头(Excel不同名)(下篇)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 昭阳殿里恩爱绝&#xff0c;蓬莱宫中日月长。 大家好&#xff0c;我是皮皮。 一、前言 上一篇文章&#xff0c;我们抛出了一个问题&#xff0c;这篇文章…

发挥CWPP在零售行业安全关键价值

新钛云服已累计为您分享747篇技术干货 CWPP产品对于零售行业安全有关键价值&#xff0c;可以极大提升零售行业安全水平&#xff0c;是零售行业必备的安全产品。 零售行业的特点 零售行业的特点是实时在线、数据有独特价值&#xff0c;安全挑战是缺乏安全投入和人员。 实时在线方…

推荐 5 月份炫炫炫的 GitHub 项目

推荐 6 个五月份比较火的开源项目。因为近期 AI 项目的火爆&#xff0c;每天 GitHub 热榜都被 AI 项目占据&#xff0c;后续开源项目会同时盘点 AI 和其他分类的开源项目。 本期推荐开源项目目录&#xff1a; 1. 多合一聊天机器人客户端&#xff08;AI&#xff09; 2. 数据库场…