RabbitMQ(三)运转流程

MQ整体流程图 分析了块设备层中基于multiqueue的代码流程图 立即下载

生产者发送消息的过程

(1)生产者连接到RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。

ConnectionFactory factory = new ConnectionFactory();
factory.setHost(HOST);
factory.setPort(PORT);
factory.setUsername(USERNAME);
factory.setPassword(PASSWORD);

// 创建TCP连接
Connection connection = factory.newConnection();
// 创建信道
Channel channel = connection.createChannel();

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

// 创建一个type="topic"、持久化的、非自动删除的交换器
channel.exchangeDeclare(EXCHANGE_NAME, ROUTING_TYPE, true, false, null);

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

// 创建一个持久化、非排他的、非自动删除的队列
channel.queueDeclare(QUEUE_NAME, true, false, false, null);

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

// 将交换器与队列通过路由键进行绑定
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);

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

// 发送一条消息
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, 
MessageProperties.PERSISTENT_TEXT_PLAIN, 
"消息内容".getBytes(StandardCharsets.UTF_8));

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

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

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

(9)关闭信道。

channel.close();

(10)关闭连接。

connection.close();

消费者接收消息的过程

(1)消费者连接到RabbitMQ Broker,建立一个连接(Connection)、开启一个信道(Channel)。

(2)消费者向RabbitMQ Broker请求消费相应队列中的消息,可能会设置相应的回调函数,以及做一些准备工作。

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

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

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

(6)关闭信道。

(7)关闭连接。

Connection:连接 Channel:信道

无论是生产者还是消费者,都需要和RabbitMQ Broker建立连接,这个连接就是一条TCP连接,也就是Connection。

一旦TCP连接建立起来,客户端紧接着可以创建一个AMQP信道(Channel),每一个信道都会被指派一个唯一的ID。信道是建立在Connection之上的虚拟连接,RabbitMQ处理的每条AMQP指令都是通过信道完成的。

完全可以直接使用Connection就能完成信道的工作,为什么还要引入信道?

如果一个应用程序中有很多线程需要从RabbitMQ中消费消息或者生产消息。那么必然需要建立很多个Connection,也就是许多个TCP连接。然而对于操作系统而言,建立和销毁TCP连接是非常昂贵的开销,如果遇到使用高峰,性能瓶颈也就随之显现。

RabbitMQ采用类似NIO的做法,选择TCP连接复用,不仅可以减少性能开销,同时也便于管理。

每个线程把持一个信道,所以信道复用了Connection的TCP连接,同时RabbitMQ可以确保每个线程的私密性,就像拥有独立的连接一样。

当每个信道的流量不是很大时,可以复用单一的Connection,有效节省TCP连接资源。

当信道本身的流量很大时,复用同一个Connection就会产生性能瓶颈,此时需要开辟多个Connection,将这些信道均摊到这些Connection中。

【学习K230-例程46】GT6700-UVC摄像头 UVC模块提供了USB摄像头的检测、配置和图像采集功能,支持单摄像头操作。本实验通过开发板上的USB接口连接摄像头,将摄像头捕获到的画面显示在显示设备上。print(f"模式{i}: {mode.width}x{mode.height} {mode.format}@{mode.fps}fps")print(f"摄像头检测: {‘已连接’ if plugin else ‘未连接’}, 设备信息: {devinfo}")检测系统是否连接了USB摄像头(当前仅支持单个摄像头检测)。获取摄像头支持的所有视频模式。 阅读详情

相关推荐

Allegro老鸟的20年效率秘籍:用YepEda Skill脚本实现PCB设计全流程自动化

本文分享了Allegro资深工程师20年效率秘籍,通过YepEda Skill脚本实现PCB设计全流程自动化。从封装建库到规则配置,再到DFM审核,YepEda Skill大幅提升设计效率,每天节省至少4小时重复劳动。文章详细解析了自动化工具链的核心功能,并提供了实战技巧和量化对比数据。

weixin_42546392的博客 240

RocketMQ架构、工作流程以及安装

消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。

qq_62767608的博客 6771

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

RabbitMQ到底是怎么运行的?

讲解RabbitMQ的具体工作流程,以及对RabbitMQ的核心概念进行讲解,让我们对RabbitMQ的认识更加深入。

一心同学的博客 2991

MIC卡的OFED驱动安装

 IB网络和OFED驱动安装 IB InfiniBand是一个统一的互联结构,可以处理存储I/O、网络I/O和进程间通信(IPC)。它可以将磁盘阵列、SANs、LANs、服务器和集群服务器进行互联,也可以连接外部网络(比如WAN、VPN、互联网)。设计InfiniBand的目的主要是用于企业数据中心,大型的或小型的。目标主要是实现高的可靠性、可用性、可扩展性和高的性能。Inf

beglorious的专栏 5106

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 319

简述 RocketMQ 的执行流程

生产者发送消息到 Broker。Broker 接收消息并存储在 CommitLog。Broker 构建 ConsumeQueue 和索引文件。消费者从 Broker 拉取或接收推送的消息。消费者处理消息并提交消费进度。RocketMQ 的设计充分考虑了消息的高性能传递、高可靠存储和高效消费,通过分布式架构和高可用机制,确保了系统的稳定性和可扩展性。理解 RocketMQ 的执行流程有助于更好地设计和优化消息传递系统,满足高并发和大数据处理的需求。

My_wife_QBL的博客 1221

MacBook 长期挂机 OpenClaw:电池保护 + 防休眠设置

本文介绍了MacBook长期挂机运行OpenClaw时的电池保护和防休眠设置方案。主要内容包括:1)电池保护策略,通过电源连接、充电限制和定期充放电维护电池健康;2)防休眠设置,禁用系统休眠、自动休眠和屏幕休眠;3)OpenClaw的Docker部署方法。文章提供了详细的命令行脚本和配置说明,帮助用户实现MacBook的长期稳定运行,同时保护电池寿命。

一键难忘的博客 1695

RocketMQ一些细节执行流程

NameServer 功能 一 是维护Broker的服务地址并进行及时的更新。 二 是给Producer和Consumer提供服务获取Broker列表 启动流程 整个NameServer的核心就是一个NamesrvController对象。响应客户端请求的。 在创建NamesrvController对象时,有两个关键的配置 NamesrvConfig 这个是NameServer自己运行需要的配置信息。 NettyServerConfig 包含Netty服务端的配置参数,默认占用了9876端口。

weixin_44778073的博客 1573

PCIe(二) —— 配置空间

好了,这一篇我们把配置空间的结构,分配和访问,都大概总结了一遍,并且还介绍了它们的头部字段和这些字段的意义,包括BAR和消息路由的原理。之后,如果有时间,我们会继续来探索PCIe的数据报文的结构和传输等等。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1768

使用PyTorch和TextCNN实现英文长文本诗歌文本分类

在这个过程中,我们了解了如何进行文本数据预处理、构建TextCNN模型,并进行训练与评估。首先,我们需要将文本文件加载到内存中,并将每个诗歌作为一个样本。然后,我们需要将每个样本转换为数字表示,这可以通过将词汇表中的每个词语映射到一个唯一的整数来实现。此外,我们还需要将每个样本的长度统一为固定值,以便于模型输入。通过这个示例,我们可以学习如何构建一个简单但有效的文本分类模型,并在具体的应用场景中进行训练和预测。该模型通过使用多个不同尺寸的卷积核来捕捉文本中的不同长度的信息,并通过最大池化操作提取关键特征。

loop_syntax648的博客 254

RabbitMQ 生产者消费者例子和执行流程

依赖 <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>4.0.3...

weixin_43246116的博客 1028

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924

RabbitMQ实战指南之RabbitMQ架构及运转流程

相关概念 RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成∶ 当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ 就好比由邮局、邮箱和邮递员组成的一个系统。从计算机术语层面来说, RabbitMQ 模型更像是一种交换机模型。RabbitMQ 的整体模型架构如所示。 生产者和消费者 Producer∶ 生产者,就是投递消息的一方。 生产者创建消息,然后发布到 RabbitMQ 中。消息一般可以包含 2 个部分∶

crazyjack1的博客 6205

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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...

RabbitMQ学习笔记-RabbitMQ的运转流程

导语

初学者 2836

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RabbitMQ运转流程

主要是为了生产者和mq之间的一个确认机制,当消息到没到mq,会提供相应的回调,在项目中 RabbitSender 这个类中进行了相应的配置。(1) 消费者连接到 RabbitMQ Broker ,建立一个连接(Connection ,开启一个信道(Channel)(2) 消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数, 以及做 些准备工作。(6) 相应的交换器根据接收到的路由键查找相匹配的队列 如果找到 ,则将从生产者发送过来的消息存入相应的队列中。

先知三日 356

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【RabbitMQ】2、谈谈你对RabbitMQ运转流程的理解?

运转流程

zgy956645239的博客 307

RabbitMQ是如何运转的?

前言   之前已经介绍了RabbitMQ交换机模型的相关简单概念,都是作为此篇的基础铺垫,如果对此篇不懂的可以先看我上一篇的介绍认识RabbitMQ交换机模型,或者联系评论,分享《RabbitMQ实战指南》电子书给大家,里面虽然有些许错误,但总体还是很棒的一本书!   本文主要介绍RabbitMQ的消息是怎么产生和通过它是怎么接收消息的(RabbitMQ如何运转)、Connection和C...

weixin_30868855的博客 172

Rabbitmq运转流程

生产者发送消息: 生产者连接到Rabbitmq Broker,建立一个连接(Connection),开启一个信道(Channel) 生产者声明一个交换机,并设置相关属性,比如交换机类型、是否持久化 生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等 生产者通过路由键将交换机和队列绑定起来 生产者发送消息至Rabbitmq Broker,其中包含路由键、交换器等信息...

Jayce的博客 320

RabbitMQ 运转流程

 在最初状态下,生产者发送消息的时候 (1) 生产者连接到RabbitMQ Broker , 建立一个连接( Connection) ,开启一个信道(Channel) (2) 生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等 (3) 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等 ( 4 ) 生产者通过路由键将交换器和队列绑定起来 ( 5 ) 生产者发...

weixin_33910460的博客 1100

边缘计算硬件选型实战指南:可靠性、兼容性、可维护性、确定性四大硬指标

边缘计算硬件不是通用服务器,而是面向工业现场的专用嵌入式系统。其核心价值在于在严苛物理环境(宽温、强电磁、电压波动)下保障数据采集、协议转换与轻量AI推理的持续可用性。技术原理上,需硬件(宽压电源、工业级存储)、固件(故障自愈策略、协议栈深度实现)、操作系统(实时Linux调度)与网络(PTP时间同步、断网续传)四层协同。关键能力包括对Modbus/OPC UA/Profinet等工业协议的语义级兼容、-25℃~85℃宽温稳定运行、U盘一键刷机与固件回滚、以及毫秒级确定性响应。典型应用场景覆盖智能工厂数据采

weixin_34306593的博客 88
上一篇: RabbitMQ(二)入门
下一篇: 2018年上半年 系统分析师 下午试卷 I 案例分析
曾梦想仗剑闯天涯
博客等级 码龄11年 9725粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值