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

【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)消费者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。(2)消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,以及做一些准备工作。(3)等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。(4)消费者确认(ack)接收到的消息。(5)RabbitMQ 从队列中删除相应已经被确认的消息。(6)关闭信道。(7)关闭连接。
http://www.lryc.cn/news/161342.html

相关文章:

  • 如何预防最新的Mallox变种malloxx勒索病毒感染您的计算机?
  • 软件测试中的43个功能测试点总结
  • Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果
  • Python读取TCP的4字节浮点数
  • javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别
  • Docker容器技术实战-1
  • LeetCode算法题:2. 两数相加
  • ResNet 09
  • 什么是脚本语言,解释脚本语言的特点和应用领域
  • selenium 定位不到元素的几种情况
  • IDEA启动项目很慢,无访问
  • 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测
  • 简单了解ARP协议
  • 【Linux】Stratis是什么?Stratis和LVM有什么关系和区别?
  • 植物大战僵尸修改金币【Steam下版本可行-其他版本未知】
  • GIS:生成Shp文件
  • 【日常笔记】使用Server过程中可能遇到的一些问题
  • 【Mysql】给查询记录增加序列号方法
  • Linux 安装elasticsearch-7.5.1
  • ElementUI浅尝辄止26:Notification 通知
  • IDEA新建的Moudle失效显示为灰色
  • Protobuf的简单使用
  • OpenCV 12(图像直方图)
  • LeetCode 面试题 03.06. 动物收容所
  • 快速理解DDD领域驱动设计架构思想-基础篇 | 京东物流技术团队
  • C++学习笔记(堆栈、指针、命名空间、编译步骤)
  • Rust Yew应用开发的事件初探
  • 高并发下单例线程安全
  • 【EKF】EKF原理
  • 蓝桥杯官网填空题(古堡算式)