RabbitMQ(二)入门

RabbitMQ:消息属性和负载的介绍和使用 1.声明 当前内容为本人学习和复习之用,当前内容包括消息属性和负载的介绍,主要用于理解消息中的组成部分 2.官方的Message Attributes and Payload介绍 Messages in the AMQP 0-9-1 model have attributes. Some attributes are so common that the AMQP 0-9-1 specification defines them and application developers do not hav 阅读详情

RabbitMQ整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。

RabbitMQ模型更像是一个交换机模型

模型架构图如下:

生产者和消费者

Producer:生产者,就是投递消息的一方。

生产者创建消息,然后发布到RabbitMQ中。消息一般包含两个部分:消息体(payload)和标签(label)。在实际情况中,消息体一般是一个带有业务逻辑结构的数据,如JSON串,也可以是这个消息的序列化操作。消息的标签用来表述这条消息,比如一个交换器的名称和一个路由键。生产者把消息交给RabbitMQ,RabbitMQ之后会根据这个标签把消息发送给感兴趣的消费者。

Consumer:消费者,就是接收消息的一方。

消费者链接到RabbitMQ服务器,并订阅到队列上。当消费者消费一条消息时,只是消费消息的消息体(payload)。在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者也只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道。

Broker:消息中间件的服务节点

一个RabbitMQ Broker可以简单看作一个RabbitMQ服务节点,或者RabbitMQ服务实例。也可以将其看作一台RabbitMQ服务器。

生产者将消息存入RabbitMQ Broker,以及消费者从Broker中消费数据的整个流程如下所示:

消费者的业务处理逻辑并不一定需要和接收消息的逻辑使用同一个线程。消费者进程可以使用一个线程去接收消息存入到内存中,比如使用Java中的BlockingQueue。业务处理逻辑使用另一个线程从内存中读取数据,这样可以将应用进一步解耦。

队列

Queue:队列,是RabbitMQ的内部对象,用于存储消息。用下图表示:

RabbitMQ中消息都只能存储在队列中,生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。

多个消费者可以订阅一个队列,这时队列中消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

RabbitMQ不支持队列层面的广播消费。

Exchange:交换器

RabbitMQ中生产者并不会直接将消息发送到队列中,而是生产者将消息发送到交换器,由交换器将消息路由到一个或多个队列中。如果路由不到或许会返回给生产者,或许直接丢弃。

RabbitMQ中的交换器有4种类型,不同类型有不同的路由策略。

RoutingKey:路由键

生产者将消息发送给交换器的时候,一般会指定一个路由键,用来指定这个消息的路由规则,而这个路由键需要与交换器类型和绑定键(BindingKey)联合使用才能生效。

在交换机类型和绑定键固定的情况下,生产者可以在发送消息给交换器时,通过指定路由键来决定消息流向哪里。

Binding:绑定

RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确的将消息路由到队列了。

生产者将消息发送给交换器时,需要一个路由键,当绑定键和路由键相匹配时,消息会被路由到对应的队列中。

在绑定多个队列到同一个交换器时,这些绑定允许使用相同的绑定键。

绑定键并不是在所有情况下都生效,它依赖于交换器类型,比如fanout类型的交换器就会无视绑定键,而是将消息路由到所有绑定到该交换器的队列中。

BindingKey其实也属于路由键的一种,官方解释为:在绑定时候使用的路由键。

交换器类型

四种常用:fanout、direct、topic、headers

fanout

它会把所有发送到该交换器的消息,路由到所有与该交换器绑定的队列中。

direct

把消息路由到那些BindingKey和RoutingKey完全匹配的队列中。

topic

对direct进行扩展,匹配规则做如下约定:

①RoutingKey为一个点号“.”分割的字符串,被点号分割的每一段独立的字符串称为一个单词。如“com.epoint.rabbitmq”

②BindingKey和RoutingKey一样也是点号分割的字符串。

③BindingKey中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多规格单词(可以是0个)。

路由键为“com.rabbitmq.client”的消息会被路由到队列1和2中

路由键为“com.hidden.client”的消息会被路由到队列2中

路由键为“com.hidden.demo”的消息会被路由到队列2中

路由键为“java.rabbitmq.demo”的消息会被路由到队列1中

headers

该类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。该类型交换器性能会很差,而且也不实用,基本上不用。

RabbitMQ入门(二) 在上一篇博客,笔者简单的介绍了一些RabbitMQ相关的内容,在这一篇博客会根据RabbitMQ官网的入门介绍,结合笔者自身的理解更深入的在代码方面介绍RabbitMQ的入门使用,。同样,这篇博客主要的目的也是整理记录自己的学习笔记,加深自己对RabbitMQ的使用与理解。 RabbitMQ入门(一) RabbitMQ入门(二) RabbitMQ入门(三) 目录 1.入门 创建消息生产... 阅读详情

相关推荐

STM32F407串口DMA收发实战:标准库配置与环形缓冲区实现

DMA(直接存储器访问)是嵌入式系统中提升数据传输效率的核心技术,它允许外设与内存直接交换数据而无需CPU干预。其工作原理是通过专用硬件控制器接管数据搬运任务,CPU仅需初始化传输参数即可处理其他事务,从而显著降低系统负载。这项技术的核心价值在于释放CPU算力,实现高吞吐、低延迟的实时通信,尤其适用于数据采集、工业控制和通信网关等场景。在STM32F407等ARM Cortex-M4芯片中,串口结合DMA可实现稳定的高速数据流处理。本文以STM32F407标准库为基础,深入解析USART1的DMA发送与接收

weixin_29169899的博客 319

RabbitMq的介绍和简单使用

1、概述 1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 2.消息服务中两个重要概念: ​ 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 3.消息队列主要有两种形式的目的地 ​ 1.队列(queue):点对点消息通信(point-to-point) ​ 2.主题(topic):发布(publish)/订阅(subscribe)消息通信 4.点对点式: ​ –消息发

HeartCoreT的博客 1332

【HAL库-STM】智能温控按键小风扇【胎教级教学】

硬件设备:DHT11,0.96寸oled屏,二/三/四线风扇(不挑),面包板 、f10的精英板等等。当人在的风扇面前时可以自行控制风扇,不在面前时又想开风扇就让他温控自行开启,(在这里有一个想法就是加上蓝牙和wifi控制的功能能够远程遥控,这个如果做的再全一点就要自主研发是一个多功能app,这里没有做。针对这个dht11,我一开始是卡在了这个check函数里面,一直是我给完dht11低电平和高电平后,dht11不回复我低电平和高电平,这个不是我的问题,当时代码是没毛病的,这个点一直卡着我。吐血五天实现小成品

weixin_52451652的博客 1741

rabbitMq介绍(一)

RabbitMQ是一个消息中间件。consumer:消息的消费者producer:消息的生产者exchange:是生产者向里面放消息queue:消费者从里面拿消息。binds:exchange和queue的绑定关系。RabbitMQ可以看作一种投递服务,生产者生产消息后,发送给mq。那么消息是什么?包括两部分内容:有效载荷(payload)和标签(label),有效载荷就是你想要传输的数据,它可以...

u011393781的博客 463

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1766

复现论文报错解决

博主复现论文代码过程中遇到的各种报错及解决方案~

rellvera的博客 1060

RabbitMQ实战(二、配置使用)

一、公共类 首先创建几个公共类,它会在消费者和生产者里都使用到 消息实体类,这个根据项目需求来决定字段属性 package com.sy.rabbitmq.common.config.rabbitmq; import lombok.Data; import java.io.Serializable; /** * @author sy * Date: 2019/11/25 11:35 ...

qq_39381892的博客 584

ESP-01S获取网络时间踩坑全记录:AT指令调试、JSON解析乱码、时区处理,一个都不能少

本文详细记录了使用ESP-01S WIFI模块获取网络时间的完整过程,包括AT指令调试、JSON解析乱码处理以及时区转换等关键步骤。通过实战案例和代码示例,帮助开发者避开常见陷阱,实现稳定的网络时间同步功能。

weixin_30460489的博客 295

RabbitMQ:@RabbitListener 与 @RabbitHandler 及 消息序列化

添加 @RabbitListener 注解来指定某方法作为消息消费的方法,例如监听某 Queue 里面的消息 MessageConvert 涉及网络传输的应用序列化不可避免,发送端以某种规则将消息转成 byte 数组进行发送,接收端则以约定的规则进行 byte[] 数组的解析 RabbitMQ 的序列化是指 Message 的 body 属性,即我们真正需要传输的内容,RabbitMQ 抽象出一个...

weixin_43343423的博客 3万+

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2203

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

RabbitMQ入门二

RabbitMQ入门二 RabbitMQ高级特性 RabbitMQ应用问题 RabbitMQ集群搭建 1 RabbitMQ高级特性 1.1 消息可靠性投递 ​ 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 confirm 确认模式 return 退回模式 rabbitmq 整个消息投递的路径为: producer—>rabbitmq broker—>exchange—&gt

梦中注定的博客 579

智能驾驶域控制器的“终极大考”:解析EOL测试的核心价值与技术实践

在智能驾驶技术高速发展的今天,域控制器(Domain Controller)作为车辆“大脑”的核心部件,承担着传感器数据处理、决策规划、执行控制等关键任务。然而,这个集成了数十个芯片、运行着数百万行代码的复杂系统,如何确保其出厂前的功能安全与性能稳定?答案就藏在被称为“生产线最后一道防线”的EOL(End of Line)测试中。

汽车电子软件领域知识分享 704

二、RabbitMQ 入门

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

wind_cp的博客 641

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【RabbitMQ】二、RabbitMQ入门介绍

rabbitMQ的官网:www.rabbitmq.com MQ RabbitMQ的介绍: 官网是这样说的: RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将您要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给您的收件人。以此类推,RabbitMQ是一个邮政信箱,一个邮局和一个邮递员。 RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息的二进制斑点。 ...

l_s_r的博客 282

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RabbitMq入门二

2.1 rabbitmq整体上是一个生产者消费者模型,主要负责接受存储转发消息 2.2 RabbitMq相关概念 Producer: 生产者,就是投递消息的一方。 消息一般包含两个部分: 消息体(payload):真正的消息内容 标签(label):路由key和交换机名称 Consumer: 消费者 就是接收消息的一方。只会消费消息体 Broker:消息服务器的节点,也可以看做是Rabbitmq服务器 ...

qq_42532161的博客 240

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RabbitMQ从入门到精通【二】RabbitMQ安装

一、RabbitMQ安装准备 二、Windows安装 三、Linux安装 四、集群部署

PowerfulQ的博客 350

二.RabbitMQ入门

1.rabbitmq架构 2.rabbitmq中的一些角色: 消费者和生产者 producer:生产者,就是投递消息的一方 消息:一般可以分成两个部分:消息体和标签(label) 消息体:称之为payload,其结构一般与业务逻辑相关,可以使字符串、json串或者二进制数据等等 标签:用来描述这条消息,比如交换器的名称或者路由键,rabbitmq主要就是根据标签把消息交给相应...

xkshihaoren的博客 258

RabbitMQ入门【二】

RabbitMq入门一级目录二级目录三级目录 一级目录 二级目录 三级目录

qq_30306577的博客 157

【RabbitMQ二】——RabbitMQ入门教程(简单模式)

本篇博客主要是实现RabbitMQ最简单的模式,一个生产者,一个队列,一个消费者。通过本篇博客能够掌握RabbitMQ最基本的运用。本篇博客主要学习至RabbitMQ官网的教程,RabbitMQ官网教程地址入门教程选择最简单的模式,本篇博客选择的是Java语言入门教程只是简单的运用,里面的具体细节是没有具体分析的。但是能够起到初步接触和使用RabbitMQ进行消息的存储、转发。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1211

RabbitMQ讲解二快速入门

接上篇文章, 这一篇主要是对rabbitMQ做一个快速入门。 在上篇文章中我们说到交换机可以绑定多个队列。 而一个消息传递到服务器后,传递到哪一个队列就是由交换机规则的。 交换机传递消息的规则就是RoutingKey。下图黄色框为RoutingKey工作的区域。 消费者只需要监听一个队列就行了是不需要经过exchange的。 下面的就是代码示例 package com.bfxy.rabbitmq...

田培融的博客 321

RabbitMq入门(二)SpringBoot中使用RabbitMq

目录 pom 首先配置RabbitMq 创建消息队列 创建消息发送者 创建消息接收者 测试 启动项目 进一步测试 pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</arti...

AmbroseLe 365
上一篇: RabbitMQ(一)简介
下一篇: RabbitMQ(三)运转流程
曾梦想仗剑闯天涯
博客等级 码龄11年 9725粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值