当前位置: 首页 > news >正文

消息中间件的基础概念入门

目录

一、什么是消息中间件

1.1、简介

1.2、消息中间件的主要作用

解耦合

异步通信

负载均衡

可靠性与持久性

消息路由与调度

削峰

事务支持

监控与审计

跨平台和跨语言支持

二、常用消息中间件对比

2.1、 RabbitMQ

2.1.1、特点

2.1.2、适用场景

2.2、Apache Kafka

2.2.1、特点

2.2.2、适用场景

2.3、 ActiveMQ

2.3.1、特点

2.3.2、适用场景

2.4、 Redis(使用 Pub/Sub 功能)

2.4.1、特点

2.4.2、适用场景

2.5、 NATS

2.5.1、特点

2.5.2、适用场景


一、什么是消息中间件

1.1、简介

消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。

当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。

1.2、消息中间件的主要作用

解耦合

消息中间件使得系统中的各个组件可以通过消息进行通信,而不需要直接相互依赖。这种解耦合使得系统的各个部分可以独立开发、部署和扩展,提高了系统的灵活性和可维护性。

异步通信

通过消息中间件,系统中的不同组件可以实现异步通信。当一个组件发送消息时,它不必等待接收方处理完毕,可以继续执行其他操作。这种异步机制提高了系统的响应性和并发处理能力。

负载均衡

消息中间件通常支持多消费者模型,允许多个消费者并发处理消息,从而实现负载均衡。这样可以有效利用系统资源,提高整体吞吐量。

可靠性与持久性

许多消息中间件提供消息持久化功能,确保即使系统故障或重启,消息也不会丢失。这对于关键业务场景尤为重要,例如金融系统和订单处理。

消息路由与调度

消息中间件能够根据各种规则(如主题、队列、消息类型等)对消息进行路由和调度,从而实现复杂的消息传递逻辑。这使得开发人员可以灵活地设计系统的消息传递流程。

削峰

消息队列中的常用场景,一般在秒杀或抢够活动中使用广泛。一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题, 我们会将那股巨大的流量拒在系统的上层,即将其转移至 MQ 而不直接涌入我们的接口。

事务支持

一些消息中间件支持分布式事务,可以确保消息的发送和处理能够原子性地保证,这对于需要强一致性的业务场景非常重要。

监控与审计

消息中间件通常提供监控和管理工具,可以实时了解消息的状态、流量以及系统的健康状况。此外,通过记录消息,可以实现审计功能,帮助追踪和分析系统行为。

跨平台和跨语言支持

许多消息中间件支持多种协议和客户端库,使得不同平台和编程语言的应用程序能够方便地进行通信,增强了系统的互操作性。

二、常用消息中间件对比

2.1、 RabbitMQ

RabbitMQ 是一个开源的消息代理,基于 AMQP(高级消息队列协议)。

2.1.1、特点

  1.   支持多种协议(AMQP, MQTT, STOMP等)。
  2.   强大的消息路由功能。
  3.   支持事务和确认机制,保证消息传递的可靠性。
  4.   提供丰富的管理界面和监控功能。

2.1.2、适用场景

适用于需要复杂消息路由和高可用性的场景,如电商系统的订单处理

2.2Apache Kafka

Kafka 是一个分布式流平台,最初由 LinkedIn 开发,现为 Apache 的开源项目。

2.2.1、特点

  1.   高吞吐量,适用于大规模数据流处理。
  2.   基于发布/订阅模型,支持多消费者。
  3.   提供持久化和分区功能,保证高可用性。
  4.   支持实时数据处理,适合流式应用。

2.2.2、适用场景

适用于需要大规模数据处理和实时分析的场景,如日志收集、监控和流数据处理

2.3 ActiveMQ

ActiveMQ 是一款开源的消息代理,支持多种协议(如 JMS, AMQP)。

2.3.1、特点

  1.   简单易用,适合快速集成。
  2.   支持多种消息传递模式(点对点和发布/订阅)。
  3.   提供高可用性和集群功能。

2.3.2、适用场景

适用于企业内部系统集成和异步处理。

2.4 Redis(使用 Pub/Sub 功能)

Redis 是一个开源的内存数据结构存储,支持简单的消息发布/订阅功能。

2.4.1、特点

  1.   高性能,低延迟。
  2.   数据持久化选项。
  3.   简单易用的 API。

2.4.2、适用场景

适合低延迟的消息传递需求,如实时聊天应用。

2.5、 NATS

NATS 是一个轻量级的开源消息系统,专注于高性能和低延迟。

2.5.1、特点

  1.   简单的发布/订阅模型。
  2.   支持请求/响应模式。
  3.   高吞吐量和低内存占用。

2.5.2、适用场景

适合微服务架构中服务之间的通信。

特性

RabbitMQ

Kafka

ActiveMQ

Redis

Pulsar

NATS

数据模型

AMQP

发布/订阅

JMS

Pub/Sub

发布/订阅

发布/订阅

吞吐量

中等

中等

持久性

支持

支持

支持

可选

支持

可选

适用场景

复杂路由和高可用需求

实时数据处理

企业集成

低延迟需求

多租户和流处理

微服务通信

配置和管理

复杂

相对简单

简单

简单

复杂

简单

相关文章:

消息中间件的基础概念入门

目录 一、什么是消息中间件 1.1、简介 1.2、消息中间件的主要作用 解耦合 异步通信 负载均衡 可靠性与持久性 消息路由与调度 削峰 事务支持 监控与审计 跨平台和跨语言支持 二、常用消息中间件对比 2.1、 RabbitMQ 2.1.1、特点 2.1.2、适用场景 2.2、Apache K…...

基于Web的宠物医院看诊系统设计与实现(源码+定制+开发)在线预约平台、宠物病历管理、医生诊疗记录、宠物健康数据分析 宠物就诊预约、病历管理与健康分析

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

Excel数据叠加生成新DataFrame:操作指南与案例

目录 一、准备工作 二、读取Excel文件 三、数据叠加 四、处理重复数据(可选) 五、保存新DataFrame到Excel文件 六、案例演示 七、注意事项 八、总结 在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步的分析和处…...

Web 开发入门之旅:从静态页面到全栈应用的第一步

Web 开发入门之旅:从静态页面到全栈应用的第一步 在当今互联网飞速发展的时代,掌握 Web 开发技能已成为众多技术爱好者和职场人士的必修课。然而,对于初学者而言,面对繁杂的技术栈和庞大的学习资源,往往感到无从下手。…...

WebSocket实现分布式的不同方案对比

引言 随着实时通信需求的日益增长,WebSocket作为一种基于TCP的全双工通信协议,在实时聊天、在线游戏、数据推送等场景中得到了广泛应用。然而,在分布式环境下,如何实现WebSocket的连接管理和消息推送成为了一个挑战。本文将对比几…...

基于注意力机制的端到端合成语音检测

End-to-end Synthetic Speech Detection Based on Attention Mechanism 摘要: 五种轻量级注意力模块改为适用于语音序列的 通道注意力机制和 一维空间注意力机制 ASVspoof2019测试集的 等错误率和 最小串联检测代价函数都有所降低 池化层之前嵌入CBAM、ECA的模型测试…...

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址:https://www.m…...

微信小程序:播放音频

在小程序开发中,音频播放是一个重要的功能。本文将详细介绍小程序音频播放的相关知识点,帮助开发者更好地掌握小程序音频播放的实现方法。 一、小程序音频播放的基本流程 在小程序中,音频播放的基本流程如下: 获取音频数据&#…...

Ubuntu安装K8S

第一步: 安装docker Install Docker #注意docker是早期的名称已经过时了,因此请使用如下命令,一步到位安装docker-ce。 第二步:设置K8S源: (大陆使用aliyun源,大陆外使用google源)…...

独立同分布时,联合概率密度函数等于边缘概率密度函数乘积

在概率论中,独立同分布(i.i.d.)指的是多个随机变量既独立又服从相同的概率分布。对于一组随机变量 (X_1, X_2, \dots, X_n),若它们是独立同分布的,那么它们的联合概率密度函数 (p(x_1, x_2, \dots, x_n)) 就可以表示为…...

半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习

前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI…...

【.net core】【sqlsugar】时间查询示例

1、时间包含查询示例 //model.TimeInterval为时间区间参数,参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...

Kotlin 协程基础十 —— 协作、互斥锁与共享变量

Kotlin 协程基础系列: Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发(一) Kotlin 协程基础三 —— 结构化并发(二) Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...

Java中网络编程的学习

目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址(Internet Protocol Address) 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤: 服务器程序…...

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…...

【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区

1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...

正则表达式基础知识及grep、sed、awk常用命令

文章目录 前言一、正则表达式元字符和特性1. 字符匹配2. 量词3. 字符类4. 边界匹配5. 分词和捕获6. 特殊字符7. 位置锚定 二、grep常用参数1. -n额外输出行号2. -v 排除匹配的行3. -E 支持扩展正则匹配4. -e进行多规则匹配搜索5. -R 递归匹配目录中的文件内容6. -r递归地搜索目…...

redhat安装docker 24.0.7

1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…...

【excel】VBA简介(Visual Basic for Applications)

文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理&#xff1a;On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…...

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍为什么self-attention可以堆叠多层,这有什么作用?

【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠多层&#xff0c;这有什么作用&#xff1f; 【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...