MQ篇(2-1)--最详细的RabbitMQ介绍

【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些? RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法。 阅读详情

一、RabbitMQ是什么


  • RabbitMQ是一个由erlang语言编写的、开源的、在AMQP基础上完整的、可复用的企业消息系统。支持多种语言,包括java、Python、ruby、PHP、C/C++等。

备注:

(1)MQ:MQ是 message queue 的简称,是应用程序和应用程序之间通信的方法。

(2)AMQP:advanced message queuing protocol ,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息并不受客户端/中间件不同产品、不同开发语言等条件的限制。

二、RabbitMQ的核心概念


  • 生产者(Producer):发送消息的应用。

  • 消费者(Consumer):接收消息的应用。

  • 队列(Queue):存储消息的缓存。

  • 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。

  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连接。

  • 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。

  • 交换机(Exchange):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须到绑定一个交换机。

  • 绑定(Binding):绑定是队列和交换机的一个关联连接。

  • 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。

三、RabbitMQ五种消息发送模式


生产者(Producer)发送->中间件->消费者(Consumer)接收消息。

RabbitMQ包括五种队列模式,简单队列、工作队列、发布/订阅、路由、主题、rpc等。

1、简单队列

(1)生产者将消息发送到队列,消费者从队列获取消息。

(2)一个队列对应一个消费者。

2、工作队列

(1)一个生产者,多个消费者。

(2)一个消息发送到队列时,只能被一个消费者获取。

(3)多个消费者并行处理消息,提升消息处理速度。

        注意:channel.basicQos(1)表示同一时刻只发送一条消息给消费者。

3、发布/订阅模式(Publish/Subcribe)

将消息发送到交换机,队列从交换机获取消息,队列需要绑定到交换机。

(1)一个生产者,多个消费者。

(2)每一个消费者都有自己的一个队列。

(3)生产者没有将消息直接发送到队列,而是发送到交换机。

(4)每一个队列都要绑定到交换机。

(5)生产者发送的消息,经过交换机到达队列,实现一个消息被多个消费者获取的目的。

(6)交换机类型为“fanout”。

        注意:交换机本身没有存储消息的能力,消息只能存储到队列中。

4、路由模式(Routing)

路由模式是发布/订阅模式的一种特殊情况。

(1)路由模式的交换机类型为“direct”。

(2)绑定队列到交换机时指定 key,即路由键,一个队列可以指定多个路由键。

(3)生产者发送消息时指定路由键,这时,消息只会发送到绑定的key的对应队列中。

5、主题模式(Topic)

将路由键和某模式进行匹配。此时,队列需要绑定到一个模式上。

符号“#”匹配一个或多个词,“*”匹配不多不少一个词。

 绑定队列到交换机指定key时,进行通配符模式匹配。

四、RabbitMQ四种交换机


有4种不同的交换机类型:

  • 扇形交换机:Fanout exchange
  • 直连交换机:Direct exchange
  • 主题交换机:Topic exchange
  • 首部交换机:Headers exchange

(1)扇形交换机

扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。

扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。

因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。

(2)直连交换机

直连交换机是一种带路由功能的交换机,一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,

当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,

就会被这个交换机送到指定的队列里面去。同样的一个binding_key也是支持应用到多个队列中的。

这样当一个交换机绑定多个队列,就会被送到对应的队列去处理。

(3)主题交换机

发送到主题交换机上的消息需要携带指定规则的routing_key,

主题交换机会根据这个规则将数据发送到对应的(多个)队列上。

主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:

  • *表示一个单词
  • #表示任意数量(零个或多个)单词。

当一个队列的绑定键为#的时候,这个队列将会无视消息的路由键,接收所有的消息。

(4)首部交换机

定义一个Hash的数据结构,消息发送的时候,会携带一组hash数据结构的信息,

当Hash的内容匹配上的时候,消息就会被写入队列

绑定交换机和队列的时候,Hash结构中要求携带一个键“x-match”,这个键的Value可以是any或者all,这代表消息携带的Hash是需要全部匹配(all),还是仅匹配一个键(any)就可以了。相比直连交换机,首部交换机的优势是匹配的规则不被限定为字符串(string)。

五、RabbitMQ集群架构模式


有以下几种:

  • 主备模式
  • 远程模式
  • 镜像模式
  • 多活模式

(1)主备模式:

就是一个主/备方案(主节点如果挂了,从节点提供服务而已)

HaProxy配置:

  listen rabbitmq_cluster
  bind 0.0.0.0:5672 
  mode tcp  #配置TCP模式
  balance roundrobin #简单的轮询
  server bhz76 192.168.11.12:5672 check inter 5000 rise 2 fall 3 #主节点
  server bhz77 192.168.11.13:5672 backup check inter 5000 rise 2 fall 3 #备用节点

备注:rabbitmq集群节点配置 #inter 每隔5秒对mq集群做健康检查,2次正确证明服务器可用,3次失败证明服务器不可用,并且配置主备机制

(2)远程模式(不常用)

远距离通信和复制,就是我们可以把消息进行不同数据中心的复制工作,我们可以跨地域的让两个mq集群互联。

模型变成了近端同步确认,远端异步确认方式,大大提高了订单确认速度,并且还能保证可靠性。

(3)镜像模式(常用)

就是实现数据的同步,一般来讲是2-3个实现数据同步(对于100%数据可靠性解决方案一般是3个节点)

,保证100%数据不丢失,在实际工作中用的最多的。

(4)多活模式

采用双中心模式(多中心),那么在两套(或多套)数据中心中各部署一套RabbitMQ集群,各中心之间还需要实现部分队列消息共享。

实现异地数据复制的主流模式,

因为远程模式配置比较复杂,所以一般来说实现异地集群都是使用双活或者多活模式来实现的。

这种模式需要依赖rabbitmq的federation插件,可以实现继续的可靠AMQP数据通信,多活模式在实际配置与应用非常的简单。

备注:

(1)主备模式和主从模式的区别:

主备模式:主节点提供读写,从节点不提供读写服务,只是负责提供备份服务,备份节点的主要功能是在主节点宕机时,完成自动切换 从-->主

主从模式:主节点提供读写,从节点只读

(2)Federation插件

Federation插件是一个不需要构建Cluster,而在Brokers之间传输消息的高性能插件,

Federation插件可以在Brokers或者Cluster之间传输消息,连接双方可以使用不同的users和vistual hosts,

双方也可以使用版本不同的RabbitMQ和Erlang。Federation插件使用AMQP协议通信,可以接收不连续的传输。

Federation Exchanges,可以看成Downstream从Upstream主动拉取消息,但并不是拉取所有消息,

必须是在Downstream上已经明确定义Bindings关系的Exchange,也就是有实际的物理Queue来接收消息,才会从Upstream拉取消息到Downstream。

使用AMQP协议实施代理间通信,Downstream会将绑定关系组合在一起,绑定/解绑命令将会发送到Upstream交换机。

因此,FederationExchange只接收具有订阅的消息。

 更多内容:

MQ篇(1)--ActiveMQ、RabbitMQ、RocketMQ、kafka中间件对比

MQ篇(2-1)--最详细的RabbitMQ介绍

MQ篇(2-2)--RabbitMQ如何保证消息的可靠性

MQ篇(3-1)--kafka基本原理

MQ篇(3-2)--kafka核心组件之一-协调器

MQ篇(3-3)--kafka核心组件之二-副本管理器

MQ篇(3-4)--kafka核心组件之三-控制器

MQ篇(3-5)--kafka核心组件之四-日志管理器

Rabbit MQ详解 RabbitMQ。 阅读详情

相关推荐

MQ(RabbitMQ.1)

这是关于rabbitmq的概念哦

Shootingmemory的博客 1592

rabbitMQ的详细介绍

rabbitMQ的详细介绍

wang20010104的博客 7万+

【年后找工作】Java八股必备知识 -- MQ篇(RabbitMQ)

想要保证发送者一定能把消息发送给RabbitMQ,一种是通过confirm机制,另外一种就是通过事务机制。RabbitMQ的事务机制,允许生产者将一组操作打包成一个原子事务单元,要么全部执行成功,要么全部失败。事务提供了一种确保消息完整性的方法,但需要谨慎使用,因为它们对性能有一定的影响。RabbitMQ是基于AMQP协议实现的,RabbitMQ中,事务是通过在通道(Channel)上启用的,与事务机制有关的方法有三个:●txSelect():将当前channel设置成transaction模式。

Z70769691的博客 1884

【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装

本文涉及MQ的基本概念、RabbitMQ简介、RabbitMQ的安装等内容

十八岁讨厌编程的博客 2万+

MQ中的RabbitMQ

消费者在接收到消息后,可以选择合适的确认机制向RabbitMQ发送确认消息(ACK),以通知RabbitMQ该消息已经被成功处理。的原则,但队列中存放的内容是消息。交换器(Exchange):在RabbitMQ等系统中,负责接收生产者发送的消息,并根据路由规则将消息路由到相应的队列。交换机是RabbitMQ的核心组件之一,它接收生产者发送的消息,并根据一定的路由规则将消息转发到一个或多个队列中。通过将消息、交换机和队列持久化存储在磁盘上,即使在RabbitMQ服务器重启后,消息也不会丢失。

qq_56650001的博客 1346

【RabbitMQ笔记(一)】之MQ与RabbitMQ的介绍

本文章由公号【开发小鸽】发布!欢迎关注!!! 老规矩–妹妹镇楼: 一. MQ (一) MQ概述        MQ全称为Message Queue(消息队列),是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。分布式系统通信有两种方式,一种是直接远程调用另一种是借助中间件来完成间接通信。通信的发送方为生产者,接收方为消费者。 (二) 消息中间件        在项目中,可以将一些无需即时返回且

开发小鸽 565

RabbitMQ介绍以及基本使用

消息队列是一种用于在分布式系统中进行通信的技术。它是一种存储和转发消息的中间件,可以用于将应用程序之间的通信解耦,从而实现高效的异步通信。消息队列允许发送者将消息发送到队列中,而接收者则可以从队列中获取消息并进行处理。这种方式可以帮助系统实现高可用性、高性能、松耦合和可伸缩性。消息队列通常包括生产者(发送消息的应用程序)、消费者(接收消息的应用程序)和队列(存储消息的缓冲区)。RabbitMQ:是由erlang语言开发,基于AMQP(高级消息队列协议)协议实现的一种消息队列。市面上还有很多消息队列,比如Ka

qq_40950398的博客 2万+

MQ组件之RabbitMQ学习

MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。下图是常见MQ组件的对比。下图是RabbitMQ管理后台的预览页面,展示了RabbitMQ节点的相关信息,如节点的名字、状态、运行时间等下图Connections(连接)页面,在这个页面查看、管理和关闭当前所有的TCP连接。下图是Channels(通道)页面,这里展示了所有当前打开的通道以及它们的详细信息下图是Exchanges(交换机)页面,这里可以查看、创建和删除交换机。

2501_90255441的博客 862

RabbitMQ--MQ介绍和RabbitMQ安装

初识MQ和安装RabbitMQ

qq_45672041的博客 1851

基于新张量核范数的TRPCA:多维数据低秩稀疏分解的理论与实践

本文深入探讨了基于新张量核范数的TRPCA(张量鲁棒主成分分析)技术。该技术通过t-product运算和新定义的张量核范数,能有效从多维数据(如视频、彩色图像)中分离低秩背景与稀疏前景/噪声。文章结合理论、核心算法(ADMM、t-SVT)及图像恢复、视频背景建模等实战案例,展示了其在处理复杂多维数据分解任务中的强大优势。

weixin_29173777的博客 269

Ubuntu 22.04下Minkowski Engine编译避坑指南:解决Cuda 12.2与Pytorch cu118版本冲突

本文详细介绍了在Ubuntu 22.04系统中解决Minkowski Engine编译时Cuda 12.2与Pytorch cu118版本冲突的实用方法。通过修改版本检查逻辑、创建兼容符号链接等技巧,帮助开发者顺利完成编译,并提供了性能优化建议和替代方案,确保三维点云处理任务的高效运行。

weixin_42543309的博客 160

集成RabbitMQ+MQ常用操作

【代码】集成RabbitMQ+MQ常用操作。

m0_74825172的博客 1610

免费搞定DWG转DXF:ODA File Converter保姆级配置指南(附常见报错解决)

本文详细介绍了如何使用ODA File Converter免费工具实现DWG到DXF的格式转换,包括环境配置、命令行参数解析、编程集成方案及常见问题解决。特别针对网络访问异常、参数配置等实际痛点提供应对策略,帮助用户高效完成工程设计文件的格式转换。

weixin_29291185的博客 5985

RabbitMQ基础篇

SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。自动声明队列、交换机及其绑定关系基于注解的监听器模式,异步接收消息封装了RabbitTemplate工具,用于发送消息Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)Exchange:交换机,图中的X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。

weixin_44029753的博客 1789

图神经网络与大模型融合的理论综述:架构、机制与未来方向

然而,它们普遍缺乏对图结构数据的原生支持,无法直接处理边、节点之间的拓扑关系,这限制了其在关系密集型任务中的表现 [23]。2020年发布的BERT [16] 开启了自监督预训练时代,而2021年后,T5 [17]、PaLM [18]、LLaMA [19] 等模型相继推出,参数规模突破千亿级,展现出惊人的上下文学习(In-context Learning)与链式推理(Chain-of-Thought)能力 [20]。例如,将医学影像作为图节点,结合病理报告文本,实现更精准的疾病诊断 [58]。

andeyeluguo的博客 295

【FPGA教程案例59】深度学习案例6——基于FPGA的CNN卷积神经网络之整体实现

在课程,我们对的基本原理有了初步认识。在上一个课程,我们完成了CNN的Relu激活层、pool池化层、卷积层以及图像输入层的实现,如下图所示:在本课程中,我们将上述四个模块结合起来,构建一个简单的CNN卷积神经网络。...

FPGA/MATLAB学习教程/源码/项目合作开发 2634

SpringCloud微服务(三)RabbitMQ、SpringAMQP、elasticsearch、DSL、MQ、ES详细介绍

d \

weixin_53669566的博客 2944

【2026年得物春招算法岗- 4月18日 -第二题- 老张爬山】(题目+思路+Java&C++&Python解析+在线测试)

这篇文章介绍了一个动态规划问题,解决老张在n天内安排爬山计划以最大化愉悦值的问题。题目允许最多k次打破"不能连续两天爬山"的规则限制。 摘要要点: 使用三维动态规划数组dp[i][j][s],表示第i天结束时已用j次机会、当天状态为s(0不爬/1爬)时的最大愉悦值 状态转移考虑两种情况:当天不爬山时取前一天两种状态的最大值;当天爬山时分别处理前一天不爬山和爬山(需消耗机会)的情况 最终结果为考虑所有可能用掉的k次机会后,最后一天两种状态的最大值 提供了Python、Java和C++三种实

m0_73659489的博客 1357

【RabbitMQ】安装详解 && 什么是MQ && RabbitMQ介绍

本文介绍了在Ubuntu系统下安装、配置和使用RabbitMQ消息队列服务的详细步骤。主要内容包括: 安装Erlang语言环境(RabbitMQ的运行依赖) 安装RabbitMQ服务端及管理界面插件 用户权限管理配置 服务启动与端口修改方法 完整的卸载流程 Windows系统下的基本操作命令 MQ概念解释及其在系统解耦和流量削峰中的作用 文章提供了完整的命令行操作指南,适合开发人员快速搭建RabbitMQ服务环境,并理解消息队列在分布式系统中的应用价值。

lirendada的博客 1551

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 789

HDR 成像技术学习(三)—— LOFIC

LOFIC(Lateral Overflow Integration Capacitor,横向溢出集合电容)介绍,从像素结构到工作时序。

沧海一升的博客 9729

MQ入门详解之RabbitMQ

RabbitMQ 是一个基于Erlang 语言开发的开源消息代理(Message Broker),遵循AMQP(高级消息队列协议)标准,专为分布式系统设计,支持异步通信、系统解耦和负载均衡。Broker:消息代理服务器,负责接收、存储和转发消息。:虚拟主机,用于逻辑隔离不同租户的资源(如 Exchange、Queue),类似于命名空间。Exchange:消息路由中心,根据绑定规则(Binding)和路由键(Routing Key)将消息分发到队列。支持多种类型(如 Direct、Topic、Fanout)

qq_73683016的博客 1467

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是MQ和认识RabbitMQ

MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订

weixin_47316183的博客 2496

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MQ简单介绍以及RabbitMQ基础使用,快速上手

摘要:MQ(消息队列)是一种FIFO队列,用于分布式系统间通信,支持同步/异步方式。RabbitMQ是其实现之一,主要作用包括异步解耦、流量削峰、消息分发和延迟通知。使用时需配置RabbitMQ服务器地址、端口、账号密码,并设置消息确认机制和重试策略。核心配置包括声明队列、交换机、绑定路由键,并配置JSON消息转换器。通过自动/手动确认机制确保消息可靠消费,失败时支持重试机制。

2301_80293365的博客 1611

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

docker 安装rabbitMQ(最详细)

docker 安装rabbitMQ 1. rabbitMQ介绍 RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。 2. MQ介绍 MQ是一个互联网架构中常见的解耦利器。 什么时候不使用MQ? 上游实时关注...

以梦为马,不负韶华 9687

RabbitMQ MQ基础

生产者消费者队列交换机消息交换机队列绑定在企业中,目前用的最多的还是Classic经典队列。而从RabbitMQ的官网就能看出,RabbitMQ目前主推的是Quorum队列,甚至有传言未来会用Quorum队列全面替代Classic经典队列。至于Stream队列,虽然已经经历了几个版本的完善修复,但是目前还是不太稳定,企业用得还比较少。

weixin_43827533的博客 1130
上一篇: MQ篇(1)--ActiveMQ、RabbitMQ、RocketMQ、kafka中间件对比
下一篇: TCP/IP篇(1)--协议模型
sun cat
sun cat 美的集团后端开发工程师 美的集团后端开发工程师 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 1万+粉丝 249原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值