第二章 初识RabbitMQ

目录

一、介绍

二、RabbitMQ的主要特性及应用场景

[2.1. 主要特性](#2.1. 主要特性)

[2.2. 应用场景](#2.2. 应用场景)

[2.3. RabbitMQ的整体架构及核心概念](#2.3. RabbitMQ的整体架构及核心概念)

[2.4. MQ的比较与选择](#2.4. MQ的比较与选择)


RabbitMQ官网地址:
https://www.rabbitmq.com/docs

一、介绍

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。能够处理大量的并发消息,适用于高吞吐量的应用场景。它支持多种消息协议和安全机制,提供丰富的监控和管理工具,方便运维人员实时监控系统状态和性能指标。RabbitMQ广泛应用于分布式系统、集成系统、子系统之间的对接,以及高并发场景下的流量削峰填谷和数据解耦等任务。‌

RabbitMQ支持下列多种编程语言:

Python

Java

Ruby

PHP

C#

JavaScript

Go

Elixir

Objective-C

Swift

二、RabbitMQ的主要特性及应用场景

2.1. 主要特性

‌可靠性‌:确保消息不会丢失,即使是在网络分区或节点故障的情况下。

‌灵活的路由‌:支持复杂的消息路由,允许消息根据内容路由到不同的队列。

‌多种协议支持‌:基于AMQP协议,与其他消息中间件兼容。

‌高可用性和扩展性‌:支持集群和分布式部署,能够处理高并发和大规模消息处理。

‌丰富的管理工具‌:提供Web管理界面,方便监控和管理消息队列的状态。

2.2. 应用场景

**包括但不限于:**‌

高并发处理‌:在电商平台的秒杀活动中,通过队列缓冲请求,减少服务器压力。

‌分布式系统集成‌:在微服务架构中,实现服务之间的解耦和异步通信。

‌任务调度‌:将任务分发到不同的处理节点,提高系统的整体效率。

RabbitMQ的安装和使用相对简单,支持多种部署方式,包括单机和集群模式,适合从小型应用到大型企业的各种规模的应用场景。

2.3. RabbitMQ的整体架构及核心概念

virtual-host(虚拟主机):起到数据隔离的作用

publisher:消息发送者

consumer:消息的消费者

queue(队列):用来存储消息直到消费者处理。

exchange(交换机):负责路由消息,用来接收生产者发送的消息,并且按照一定的规则将消息路由到消息队列。

绑定(Binding):一个规则,用于告诉交换器消息应该被如何路由到队列。

信道(Channel):建立在连接之上的虚拟连接,RabbitMQ操作都是在信道中进行。

连接(Connection):RabbitMQ客户端和代理服务器之间的TCP连接。

2.4. MQ的比较与选择

在选择消息队列(MQ)时,需要考虑的核心因素包括系统的吞吐量、可靠性、可用性、扩展性以及与现有技术的兼容性。‌ 根据这些因素,以下几种消息队列系统在性能和适用场景上有各自的优势和劣势,ActiveMQ由于它的性能可靠性等各方面都比较差,在实际项目中我们通常是不会使用:

1‌. RabbitMQ‌:

‌特点‌:RabbitMQ是一个轻量级的消息队列系统,部署和使用都非常简单。

‌适用场景‌:适合对性能要求不是特别高,但需要易用性和灵活性的场景。

‌缺点‌:在大量消息堆积时,性能会急剧下降;使用小众语言Erlang开发,扩展和二次开发维护成本较高。

2‌. RocketMQ‌:

‌特点‌:由阿里开发,侧重于消息的顺序投递,具有高吞吐量和可靠性。

‌适用场景‌:适合处理高吞吐量的在线业务场景,如交易系统中的订单处理。

‌缺点‌:与周边生态系统的集成和兼容程度略逊于其他系统。

3‌. Kafka‌:

‌特点‌:Kafka是一个成熟的消息队列产品,支持高可靠性和稳定性。

‌适用场景‌:适合处理大量数据,适用于需要高吞吐量和容错性的场景。

‌缺点‌:单机超过64个队列/分区时,负载会明显增加,响应时间延长;适用于批量处理,同步收发消息的响应时延较高。

‌4. AMQP协议‌:

‌特点‌:AMQP是一种应用层的协议,用于消息队列的开放标准协议。

‌适用场景‌:适用于需要高度标准化的消息传递系统,支持多种消息队列产品。

‌优点‌:提供了生产者、消费者、交换机、队列等标准概念,便于系统间的通信和集成。

选择合适的消息队列系统时,应根据具体需求评估各个系统的特性,选择最适合项目需求的系统。例如,如果项目需要高吞吐量和容错性,Kafka可能是一个好的选择;而如果需要与现有生态系统高度集成,对消息的可靠性要求比较高,RocketMQ或RabbitMQ可能更合适‌。

相关推荐
Coisinier40 分钟前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
A心有千千结1 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github
书生执笔画浮沉1 小时前
Linux 内核模块为什么不能自己解决兼容性问题?
linux·c·kernel·update·灵感
15Moonlight2 小时前
Linux网络(03):Socket 编程 TCP
linux·网络·tcp/ip
广州灵眸科技有限公司2 小时前
单芯片同时跑 Linux 与 RT-Thread:RV1126B的AMP异构方案完整拆解
linux·运维·服务器
小雪崩2 小时前
嵌入式学习:Linux驱动开发总结
linux·驱动开发·学习
C++ 老炮儿的技术栈2 小时前
std::atomic 是什么
linux·c语言·网络·c++·visual studio
2401_862880823 小时前
input 子系统框架 、platform 驱动框架
linux·驱动开发·嵌入式硬件
Liuqy-053 小时前
线程的互斥与同步机制——互斥锁、条件变量、无名信号量
linux·开发语言·线程·进程·条件变量·同步·互斥
十年磨一剑~3 小时前
LVDS 背光控制问题排查与 DTS 修正文档
linux·ubuntu