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

目录

一、什么是消息中间件

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

发布/订阅

发布/订阅

吞吐量

中等

中等

持久性

支持

支持

支持

可选

支持

可选

适用场景

复杂路由和高可用需求

实时数据处理

企业集成

低延迟需求

多租户和流处理

微服务通信

配置和管理

复杂

相对简单

简单

简单

复杂

简单

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

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

相关文章

C语言结构体漫谈:从平凡中见不平凡

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式(如 WPS 文档或表格)。然而,可以通过几种间接的方式实现这一目标,确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案: ​ 导出…

LeetCode | 栈与队列:算法入门到进阶的全解析

栈和队列作为最基础的数据结构,不仅简单直观,还在算法世界中扮演着举足轻重的角色。无论是处理括号匹配问题、滑动窗口、还是实现先进先出的任务调度,栈与队列都是核心工具。 在本篇文章中,我们将以 LeetCode 中的经典题目为例&am…

得物App再迎开放日,全流程体验正品查验鉴别

近日,得物App超级品质保障中心再度迎来了开放日活动。近60位得物App的用户与粉丝齐聚超级品质保障中心,全流程体验正品查验鉴别。开放日当天,参与者有机会近距离观察得物App的商品质检区、鉴别区、收发流转区、实验室和正品库等关键功能区&am…

docker 部署 MantisBT

1. docker 安装MantisBT docker pull vimagick/mantisbt:latest 2.先运行实例,复制配置文件 docker run -p 8084:80 --name mantisbt -d vimagick/mantisbt:latest 3. 复制所需要配置文件到本地路径 docker cp mantisbt:/var/www/html/config/config_inc.php.…

【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声

【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声 目录 文章目录 【大语言模型】ACL2024论文-38 从信息瓶颈视角有效过滤检索增强生成中的噪声目录后记 《An Information Bottleneck Perspective for Effective Noise Filtering on Retrieval-Augment…

《火焰烟雾检测开源神经网络模型:智能防火的科技护盾》

一、火灾威胁与检测需求 火灾,始终是高悬在人类社会头顶的 “达摩克利斯之剑”,其带来的灾难后果触目惊心。根据国家消防救援局发布的数据,仅在 2024 年上半年,全国就接报火灾达 31.7 万起 ,造成了 1173 人不幸遇难&am…

深入探究Linux树状目录结构

Linux 作为一款广泛使用的开源操作系统,其目录结构采用了树状设计,这种结构清晰、有条理,便于用户和系统进行文件管理与操作。 一、根目录(/) 根目录是整个 Linux 文件系统的起始点,就像一棵大树的根部&…

【C语言4】数组:一维数组、二维数组、变长数组及数组的练习题

文章目录 前言一、数组的概念二、一维数组2.1. 数组的创建和初始化2.2. 数组的类型2.3. 一维数组的下标2.4. 数组元素的打印和输入2.5. 一维数组在内存中的存储2.6. sizeof 计算数组元素个数 三、二维数组3.1. 二维数组的概念3.1. 二维数组的创建与初始化3.2. 二维数组的下标3.…

图论1-问题 C: 算法7-6:图的遍历——广度优先搜索

题目描述 广度优先搜索遍历类似于树的按层次遍历的过程。其过程为:假设从图中的某顶点v出发,在访问了v之后依次访问v的各个未曾被访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先…

【今日分享】人工智能加速发现能源新材料的结构与性能

人工智能与材料国际学术会议(ICAIM)workshop9是由来自宁夏大学材料与新能源学院副院长王海龙教授及马薇副教授、杜鑫老师组成,他们将以“人工智能加速发现新能源新材料的结构与性能”为主题开展研讨工作,欢迎对该主题感兴趣的专家学者携稿加入。 loadin…

Docker拉取hello-world失败超时解决方法(配置多个镜源)

问题图片 解决方案 //创建目录 sudo mkdir -p /etc/docker //写入加速器配置 sudo tee /etc/docker/daemon.json <<-EOF "registry-mirrors": "https://do.nark.eu.org", "https://dc.j8.work", "https://docker.m.daocloud.io"…

[操作系统] 深入理解操作系统的概念及定位

概念 任何计算机系统都包含⼀个基本的程序集合&#xff0c;称为操作系统(OS)。 其核心功能如图片所示&#xff0c;包括&#xff1a; 内核 (Kernel)&#xff1a; 内核是操作系统的核心部分&#xff0c;被认为是狭义上的操作系统&#xff0c;直接与硬件打交道。负责进程管理、内…

某政务行业基于 SeaTunnel 探索数据集成平台的架构实践

分享嘉宾&#xff1a;某政务公司大数据技术经理 孟小鹏 编辑整理&#xff1a;白鲸开源 曾辉 导读&#xff1a;本篇文章将从数据集成的基础概念入手&#xff0c;解析数据割裂给企业带来的挑战&#xff0c;阐述数据集成的重要性&#xff0c;并对常见的集成场景与工具进行阐述&…

c#删除文件和目录到回收站

之前在c上遇到过这个问题&#xff0c;折腾许久才解决了&#xff0c;这次在c#上再次遇到这个问题&#xff0c;不过似乎容易了一些&#xff0c;亲测代码如下&#xff0c;两种删除方式都写在代码中了。 直接上完整代码&#xff1a; using Microsoft.VisualBasic.FileIO; using Sy…

数据合并与数据关联:数据处理中的核心操作

在数据分析和处理过程中&#xff0c;数据合并&#xff08;Data Merging&#xff09;和数据关联&#xff08;Data Association&#xff09;是两个非常重要的操作。它们分别用于整合不同数据集中的信息以及发现数据之间的潜在关系。 数据合并&#xff08;Data Merging&#xff0…

RK3576 Android14 状态栏和导航栏增加显示控制功能

问题背景&#xff1a; 因为RK3576 Android14用户需要手动控制状态栏和导航栏显示隐藏控制&#xff0c;包括对锁屏后下拉状态栏的屏蔽&#xff0c;在设置功能里增加此功能的控制&#xff0c;故参考一些博客完成此功能&#xff0c;以下是具体代码路径的修改内容。 解决方案&…

【初阶数据结构】序列系统重构:顺序表

文章目录 1.线性表2.顺序表2.1 概念及结构2.1.1 静态顺序表2.2.2 动态顺序表 2.2 接口实现2.2.1 顺序表打印2.2.2 顺序表初始化2.2.3 顺序表销毁2.2.4 顺序表容量检查2.2.5 顺序表尾插2.2.6 顺序表头插2.2.7 顺序表尾删2.2.8 顺序表头删2.2.9 顺序表在pos位置插入x2.2.10 顺序表…

Cosmos:英伟达发布世界基础模型,为机器人及自动驾驶开发加速!

1. 简介 在2025年消费电子展&#xff08;CES&#xff09;上&#xff0c;NVIDIA发布了全新的Cosmos平台&#xff0c;旨在加速物理人工智能&#xff08;AI&#xff09;系统的开发&#xff0c;尤其是自主驾驶车辆和机器人。该平台集成了生成式世界基础模型&#xff08;WFM&#x…

Fine Report连接Mysql数据库

点击 号 点击【数据库查询】 定义数据连接 数据库所在服务器的 IP 地址和端口号&#xff1b; 数据库的名称&#xff1b; 数据库的用户名和密码&#xff1b; 点击【测试连接】 编辑SQL语句 点击确定后&#xff0c;就会出现这张表的所有字段 注意&#xff1a; 一个sql语句对应…