• 【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通道拿到相应对列上的消息。

    消息发送与接收流程

    消息流转模型

    在这里插入图片描述

    生产者发送消息

    1、生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。
    
    2、生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等。
    
    3、生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等。
    
    4、生产者通过路由键将交换器和队列绑定起来。
    
    5、生产者发送消息至 RabbitMQ Broker,其中包含路由键、交换器等信息。
    
    6、相应的交换器根据接收到的路由键查找相匹配的队列。
    
    7、如果找到,则将从生产者发送过来的消息存入相应的队列中。
    
    8、如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者。
    
    9、关闭信道。
    
    10、关闭连接。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    消费者消费消息

    (1)消费者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。
    
    (2)消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,
    
    以及做一些准备工作。
    
    (3)等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。
    
    (4)消费者确认(ack)接收到的消息。
    
    (5)RabbitMQ 从队列中删除相应已经被确认的消息。
    
    (6)关闭信道。
    
    (7)关闭连接。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    软件测试面试技巧有哪些?这几点你得知道,不然后悔都来不及
    155_模型_Power BI & Power Pivot 进销存之安全库存
    【算法分析与设计】贪心算法(下)
    24考研为什么要预报名?除了抢考点,这些事报名前一定要知道!速进!
    Halcon 3D 切片法检测物料
    PWN入门(3)覆盖堆栈上的变量
    外包干了四年,秋招终于上岸了
    推荐一种更加便捷的 Python 数据处理方式
    使用Reflect封装Excel导出工具类
    [ruby on rails] postgres sql explain 优化
  • 原文地址:https://blog.csdn.net/Java_Wxlin/article/details/132686189