【RabbitMQ】介绍及消息收发流程

介绍

RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ

主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即 Advanced Message Queuing

Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP

的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ 是一个开源的 AMQP

实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持

AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

相关概念

通常我们谈到队列服务,会有三个概念:发消息者、队列、收消息者 ,RabbitMQ 在这个基本概念之上,多做了一层抽象,在发消息者和队列之间,加入了交换器 (Exchange)

这样发消息者和队列就没有直接联系,转而变成发消息者把消息给交换器,交换器根据调度策略再把消息给队列。

工作原理

  • 1.首先有个生产者产生一条消息。

  • 2.需要把消息发到mq上面去,就需要建立tcp连接,然后建立channel。

  • 3.然后通过channel将消息发布到mq中的一个交换机上面去(Exchange)。

  • 4.通过交换机(Exchange)将消息发送到相应的对列(queue)上面去。

  • 5.接下来就是消费者了,通过建立tcp连接,通过channel通道拿到相应对列上的消息。

消息发送与接收流程

消息流转模型

生产者发送消息

text 复制代码
1、生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。

2、生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等。

3、生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等。

4、生产者通过路由键将交换器和队列绑定起来。

5、生产者发送消息至 RabbitMQ Broker,其中包含路由键、交换器等信息。

6、相应的交换器根据接收到的路由键查找相匹配的队列。

7、如果找到,则将从生产者发送过来的消息存入相应的队列中。

8、如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者。

9、关闭信道。

10、关闭连接。

消费者消费消息

text 复制代码
(1)消费者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。

(2)消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,

以及做一些准备工作。

(3)等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。

(4)消费者确认(ack)接收到的消息。

(5)RabbitMQ 从队列中删除相应已经被确认的消息。

(6)关闭信道。

(7)关闭连接。
相关推荐
小满、36 分钟前
RabbitMQ:Fanout、Direct、Topic 交换机、队列声明与消息转换器
java·分布式·消息队列·rabbitmq·spring amqp
Wang's Blog1 小时前
RabbitMQ: 分布式事务的最终一致性解决方案
分布式·rabbitmq
低调电报2 小时前
我的第一个开源项目:鸿蒙分布式“口袋健身”教练
分布式·开源·harmonyos
2501_940198692 小时前
【前瞻创想】Kurator分布式云原生平台:从架构解析到企业级多云集群管理实战指南
分布式·云原生·架构
川212 小时前
Nacos和ZooKeeper的选型
分布式·zookeeper·云原生
醉舞经阁半卷书12 小时前
zookeeper服务端配置
网络·分布式·zookeeper
周杰伦_Jay3 小时前
【探索实战】从0到1精通Kurator:分布式云原生平台实战教程
分布式·云原生·kurator
云和数据.ChenGuang12 小时前
OpenEuler系统下RabbitMQ安装与基础配置教程
服务器·分布式·rabbitmq·ruby·数据库运维工程师·运维教程
大千AI助手17 小时前
程序合约:形式化验证中的规范与实现框架
分布式·区块链·软件开发·形式化验证·大千ai助手·程序合约·contracts
云和数据.ChenGuang17 小时前
Deepseek适配场景:OpenEuler系统下RabbitMQ安装与基础配置教程
分布式·rabbitmq·ruby