常用的消息中间件

下面是常用消息中间件 RabbitMQActiveMQKafkaRocketMQRedis(Pub/Sub 模式) 的消息队列调研文档,包括各自的特点、优缺点以及对比分析。

1. RabbitMQ

简介

RabbitMQ 是基于 AMQP 协议的开源消息队列,擅长复杂消息路由,提供插件支持和可靠的消息传递。

特点
  • 协议支持:支持 AMQP、MQTT、STOMP。
  • 路由机制:支持 direct、fanout、topic 和 headers 等多种交换机类型。
  • 消息可靠性:通过消息确认、持久化和死信队列保障可靠性。
  • 插件扩展:支持丰富的插件,如延迟队列和监控工具。
优点
  • 成熟稳定,社区活跃。
  • 支持复杂的消息路由。
  • 灵活配置消息持久化和确认机制。
  • 丰富的管理工具和监控功能。
缺点
  • 高并发下性能有限(约 10 万 TPS)。
  • 消息堆积时性能下降较为显著。
  • 运维和调优相对复杂。

2. ActiveMQ

简介

ActiveMQ 是 Apache 基金会维护的开源消息代理,完全兼容 JMS,支持多种协议。

特点
  • 协议支持:支持 JMS、AMQP、MQTT、OpenWire、STOMP。
  • 多种持久化选项:如 KahaDB 和 JDBC。
  • 兼容性:与 Java 生态和 JEE 集成良好。
优点
  • 完全支持 JMS 标准,适合 Java 应用。
  • 协议兼容性强,适用性广。
  • 入门门槛低,部署相对简单。
缺点
  • 性能和吞吐量低于其他主流中间件(约 1 万 TPS)。
  • 消息堆积时性能较差。
  • 扩展性有限,不适合高并发场景。

3. Kafka

简介

Kafka 是分布式流处理平台,专注于高吞吐量和实时数据流处理。

特点
  • 高吞吐量:每秒可处理百万级消息。
  • 分布式架构:支持水平扩展和高可用。
  • 消息持久化:默认持久化,可回溯消费。
  • 流处理支持:内置 Streams API 和 Connect 工具。
优点
  • 高吞吐量,适合大规模数据流处理。
  • 水平扩展能力强,分区机制高效。
  • 持久化默认开启,支持回溯消费。
  • 社区活跃,生态系统丰富。
缺点
  • 学习成本高,配置和运维复杂。
  • 消费模型相对复杂,不支持消息确认机制。
  • 适用于批量处理,低延迟场景表现一般。

4. RocketMQ

简介

RocketMQ 是阿里巴巴开源的分布式消息队列,支持事务消息和延迟队列。

特点
  • 事务支持:支持分布式事务消息。
  • 高吞吐量:优化后的高性能(约 20 万 TPS)。
  • 延迟队列:支持定时或延迟消息投递。
  • 分布式架构:支持水平扩展和高可用。
优点
  • 性能优异,吞吐量高。
  • 支持分布式事务和延迟消息。
  • 与主流大数据技术兼容。
  • 社区支持较好,适合电商和金融场景。
缺点
  • 配置较复杂,运维成本较高。
  • 社区和生态规模小于 Kafka 和 RabbitMQ。
  • 延迟队列功能适用场景有限。

5. Redis(Pub/Sub 模式)

简介

Redis 的 Pub/Sub 提供了轻量级的消息发布与订阅功能,性能优异但功能有限。

特点
  • 轻量级:无需额外配置,即可支持消息队列功能。
  • 实时性:消息延迟极低。
  • 无持久化:Pub/Sub 模式不保存历史消息。
优点
  • 简单易用,零配置即可使用。
  • 极低的消息延迟,性能优异(单实例百万级 TPS)。
  • 适合轻量级实时通信场景。
缺点
  • 无持久化,消息无法回溯。
  • 无高级功能(如消息确认、死信队列)。
  • 消息队列功能较弱,扩展性有限。

6. 对比分析

特性RabbitMQActiveMQKafkaRocketMQRedis(Pub/Sub)
协议支持AMQP、MQTT、STOMPJMS、AMQP、MQTT、STOMP原生协议原生协议、部分支持 JMS
吞吐量中等(~10 万 TPS)较低(~1 万 TPS)高(~百万 TPS)高(~20 万 TPS)极高(单实例百万 TPS)
消息持久化支持,需配置支持,性能较差默认持久化默认持久化不支持
可靠性高,支持确认机制中,可靠性依赖配置高,默认多副本持久化高,支持事务消息较低
延迟中等较高中等极低
扩展性较好,支持集群一般,扩展性有限极强,分布式设计较强较弱
适用场景复杂路由、企业应用小型项目、传统企业应用实时流处理、大数据电商、金融、分布式事务轻量级实时通信

7. 选择建议

  • RabbitMQ:适用于中小型企业需要可靠消息传递和复杂路由的场景,尤其是支持 AMQP 协议的系统。
  • ActiveMQ:适合轻量级 Java 应用集成,需求简单且吞吐量不高的场景。
  • Kafka:是高吞吐量和实时流处理的首选,适用于大数据、日志收集和事件驱动架构。
  • RocketMQ:适合对延迟和性能要求高的场景,如电商订单系统、分布式事务消息。
  • Redis(Pub/Sub 模式):适用于对延迟敏感、功能简单的实时通信场景,如在线聊天、实时通知。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV和Qt坐标系不一致问题

“ OpenCV和QT坐标系导致绘图精度下降问题。” OpenCV和Qt常用的坐标系都是笛卡尔坐标系,但是细微处有些不同。 01 — OpenCV坐标系 OpenCV是图像处理库,是以图像像素为一个坐标位置,即一个像素对应一个坐标,所以其坐标系也叫图像…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…

《剖析 Spring 原理:深入源码的旅程(二)》

六、Spring 的 Bean 注入与装配 Spring 的 Bean 注入与装配的方式有很多种,可以通过 xml、get set 方式、构造函数或者注解等。简单易用的方式就是使用 Spring 的注解,Spring 提供了大量的注解方式,如 Autowired、Qualifier 等。Spring 还支持…

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…

CSRF保护--laravel进阶篇

laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…

jupyter notebook的 markdown相关技巧

目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点:一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果:加粗,斜体&#x…

【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中,我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来,将开启一个新的阶段&#…

redis工程实战介绍(含面试题)

文章目录 redis单线程VS多线程面试题**redis是多线程还是单线程,为什么是单线程****聊聊redis的多线程特性和IO多路复用****io多路复用模型****redis如此快的原因** BigKey大批量插入数据测试数据key面试题海量数据里查询某一固定前缀的key如果生产上限值keys * ,fl…

神经网络问题之二:梯度爆炸(Gradient Explosion)

梯度爆炸(Gradient Explosion)是神经网络训练过程中常见的一个问题,它指的是在反向传播过程中,梯度值变得非常大,超出了网络的处理范围,从而导致权重更新变得不稳定甚至不收敛的现象。 一、产生原因 梯度爆…

小杨的N字矩阵c++

题目描述 小杨想要构造一个m*m 的 N 字矩阵( m为奇数),这个矩阵的从左上角到右下角的对角线、第1 列和第m 列都 是半角加号 ,其余都是半角减号 - 。例如,一个 5*5 的 N 字矩阵如下: --- -- -- -- --- 请…

2024 年企业中的生成式 AI 现状

2024: The State of Generative AI in the Enterprise - Menlo Ventures 企业 AI 格局正在被实时改写。随着试点(Pilot)让位于生产(Production),我们对 600 名美国企业 IT 决策者进行了调查,以揭示新出现的…

Ubuntu24虚拟机-gnome-boxes

推荐使用gnome-boxes, virtualbox构建失败,multipass需要开启防火墙 sudo apt install gnome-boxes创建完毕~

Haystack 的开源开发 LLM 应用设计框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

leetcode 919.完全二叉树插入器

1.题目要求: 完全二叉树 是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。设计一种算法,将一个新节点插入到一棵完全二叉树中,并在…

提升性能测试效率与准确性:深入解析JMeter中的各类定时器

在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

亚信安全发布《2024年第三季度网络安全威胁报告》

《亚信安全2024年第三季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第三季度的网络攻击威胁,目的是提供一个准确和直观的终端威胁感知。帮助用户更好地识别网络安全风险,并采取有效的防…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…

利用c语言详细介绍下选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它是每次选出最小或者最大的元素放在开头或者结尾位置(采用升序的方式),最终完成列表排序的算法。 一、图文介绍 我们还是使用数组【10,5,3…

candence: 非金属化孔制作

非金属化孔制作 以下面这个RJ45接口为例 1、打开pad designer 只需要设置开始、结束层即可。 保存 来直观看下非金属化孔和金属化孔的区别: