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

RabbitMQ消息属性详解

content-type属性

如同各种标准化的HTTP规范,content-type传输消息体的MIME类型。例如,如果你的应用程序正在发送JSON序列化的数据值,那么将content-type属性设置为application/json将允许尚待开发的消费者应用程序在收到消息时检查消息类型并对消息进行正确解码。

在 RabbitMQ 中,默认的 content-type 是 application/octet-stream。

application/octet-stream 是一个常见的 MIME 类型,它表示二进制数据流,也可以理解为未知的二进制文件类型。"octet" 指的是 8 位字节,表示该类型可以包含任意的二进制数据。由于它是一个通用的二进制数据流类型,它不会对数据进行解析或做出任何假设,而是将数据视为纯粹的字节序列。

application/octet-stream 类型的文件通常没有特定的格式或解析方式,因此接收者需要根据具体的需求和上下文来处理该文件。它可以用于传输任何类型的数据,例如图像、音频、视频、压缩文件等。

在 RabbitMQ 中,默认将消息的 content-type 设置为 application/octet-stream,因为 RabbitMQ 不对消息的内容进行解析或做任何假设,它仅负责将消息传递给消费者。消费者可以根据自己的需求和上下文来解析和处理接收到的消息数据。

content-encoding属性

默认情况下,通过AMQP发送的消息并不会被压缩。在处理如XML这种过于繁杂的标记语言时,甚至在消息数量较大的场景下处理像JSON或YAML等较少使用标记的轻量级格式时,这都可能会是个问题。你的发布者可以在发布消息之前压缩消息,并在收到消息时进行解压缩,如同我们使用gzip在服务器上压缩网页然后在浏览器端实时解压缩这些网页之后再进行展示一样。

RabbitMQ 的content-type和content-encoding是如何结合使用的

在 RabbitMQ 中,content-type 和 content-encoding 是两个相关但独立的消息属性,用于描述消息的内容类型和内容编码方式。

content-type 属性指定了消息体的内容类型,例如 application/json、text/plain、image/jpeg 等。它告诉消费者如何解析和处理消息的内容。

content-encoding 属性指定了消息体的内容编码方式,例如 gzip、deflate、identity 等。它告诉消费者消息体是否经过了压缩或其他编码方式的处理。

这两个属性可以结合使用,以便消费者能够正确地解码和处理消息。以下是一些示例:

 

消费者在接收到消息时,首先会检查 content-type 属性来确定消息的内容类型。然后,根据 content-encoding 属性,消费者可以选择是否需要解码消息体。

如果 content-encoding 属性为 identity,则消息体未经过任何编码处理,消费者可以直接读取和处理消息体。

如果 content-encoding 属性指定了某种编码方式(例如 gzip),则消费者需要根据指定的编码方式对消息体进行解码,以获取原始的消息内容。

需要注意的是,content-type 和 content-encoding 是消息的属性,由生产者在发送消息时设置。消费者在接收到消息时,可以读取这些属性来正确处理消息的内容

message-id和correlation-id

在AMQP规范中,message-id和correlation-id是“应用级别使用”的属性,并没有提供正式的行为定义。这意味着就规范而言,你可以利用它们实现任何目的。这两个字段允许多达255个字节的UTF-8编码数据,并以未压缩的方式存储在Basic.Properties数据结构中。

【Message-id】某些消息类型(如登录事件)并不需要与其关联的唯一标识,但我们很容易想象如销售订单或支持类请求等的消息需要具备这个唯一标识。当消息流经松耦合系统中的各个组件时,message-id属性使得消息能够在消息头中携带数据,该数据可以唯一地识别该消息。message-id 是消息的唯一标识符,由生产者在发送消息时设置。它用于唯一标识一条消息,并且在整个消息的生命周期中保持不变。message-id 属性可以用于跟踪消息、识别重复消息或在消息处理过程中进行日志记录

【Correlation-id】虽然在AMQP规范中没有关于correlation-id的正式定义,但它的一个用途是指定该消息是另一个消息的响应,通过携带关联消息的message-id可以做到这一点。另一种选择是使用它来传送关联消息的事务ID或其他类似数据。correlation-id 是用于关联消息的属性,通常在消息请求和响应之间使用。当一个系统发送请求消息时,它可以设置 correlation-id 属性为一个唯一的值。然后,当该请求消息被处理并得到响应时,响应消息的 correlation-id 属性会与请求消息的 correlation-id 相匹配,以表明响应消息与哪个请求消息相关联。

通过使用 correlation-id 属性,可以轻松地将请求和响应进行匹配和关联。这在分布式系统或异步消息传递中特别有用,允许跟踪消息的处理和建立请求-响应模式。

需要注意的是,message-id 和 correlation-id 都是可选的消息属性,生产者可以选择是否设置它们。如果生产者没有显式设置这些属性,RabbitMQ 会为消息自动生成一个唯一的 message-id。

消费者在接收到消息时,可以读取 message-id 和 correlation-id 属性来处理消息,并根据需要进行跟踪、日志记录或关联请求和响应。

timestamp属性

RabbitMQ 中的消息可以包含一个名为 timestamp 的属性,用于表示消息的时间戳。timestamp 属性指示消息发送的时间,它是一个整数值,表示自1970年1月1日以来的毫秒数。

生产者在发送消息时可以设置 timestamp 属性,以指定消息的时间戳。这对于在消息中包含时间信息,或者与消息的时间相关的处理非常有用。

消费者在接收到消息时可以读取 timestamp 属性,以获取消息的时间戳。这允许消费者根据消息的时间戳进行处理,例如根据消息的发送时间进行排序、计算消息的延迟等

需要注意的是,RabbitMQ 并不会自动为每条消息设置 timestamp 属性,它是可选的。如果生产者没有显式设置 timestamp 属性,则消息的 timestamp 默认为未设置状态。因此,消费者在处理消息时应该检查 timestamp 属性是否存在,以避免处理未设置时间戳的消息。

expiration属性

在 RabbitMQ 中,消息可以具有一个名为 expiration 的属性,用于指定消息的过期时间。expiration 属性是一个字符串,表示消息在队列中可以保留的时间。

当消息在队列中等待被消费时,RabbitMQ 会根据消息的 expiration 属性进行判断。如果消息在队列中的时间超过了指定的过期时间,RabbitMQ 将会自动将该消息从队列中移除,并发送给死信交换机(Dead Letter Exchange)进行进一步处理。

通过设置 expiration 属性,可以实现消息的自动过期和延迟处理。这对于处理具有时间敏感性的消息非常有用,例如在一定时间内未被消费的消息可以被认为是过期的,从而进行相应的处理。

需要注意的是,expiration 属性的值是以毫秒为单位的时间间隔,指示消息在队列中保留的时长。如果 expiration 属性设置为 0 或负数,则表示消息不会过期,会一直保留在队列中。

在 RabbitMQ 中,默认情况下,消息的 expiration 属性是未设置的(unset)。这意味着消息不会自动过期,除非你在发送消息时显式地设置了 expiration 属性。

如果你没有设置消息的 expiration 属性,消息将保留在队列中直到被消费或手动从队列中删除。

需要注意的是,RabbitMQ 中可以配置针对队列级别的消息过期策略,该策略可以在创建队列时指定。这将应用于所有发送到该队列的消息,除非单独设置了消息的 expiration 属性。如果设置了队列级别的消息过期策略,它将覆盖消息的个别 expiration 设置。但是,默认情况下,RabbitMQ 不会对消息应用任何过期策略,消息将保留在队列中直到被处理。

delivery-mode

delivery-mode属性是一个字节字段,向消息代理服务器表明在将消息投递给任何正在等待的消费者之前,是否希望先将它持久化到磁盘上。在RabbitMQ中,持久化消息意味着即使RabbitMQ服务器重新启动,消息也会保留在队列中直到被消费。delivery-mode属性有两个可能的值:1表示非持久化消息,2表示持久化消息。

需要注意的是,默认情况下,RabbitMQ 将消息视为非持久性消息,即 delivery-mode 属性为 1。这意味着,如果没有显式地设置消息的 delivery-mode 属性,消息将被标记为非持久性消息。

app-id和user-id

在 RabbitMQ 中,消息可以包含两个与身份相关的属性:app-id 和 user-id。

app-id 属性用于标识发送消息的应用程序的标识符。它可以是应用程序的名称、ID 或其他标识符。app-id 属性可以帮助消费者识别消息来自哪个应用程序,并根据需要进行处理或路由。

user-id 属性用于标识发送消息的用户的标识符。它可以是用户的名称、ID 或其他标识符。user-id 属性用于在多用户环境中跟踪消息的来源,并可能用于进行权限验证或其他身份验证操作。

这些属性通常由生产者在发送消息时设置,以提供有关消息来源和身份的信息。消费者在接收到消息时可以读取这些属性,以便根据需要进行相应的处理。

消费者在接收到消息时可以通过读取消息的 app-id 和 user-id 属性来识别消息的来源和用户,然后根据需要进行相应的处理。这对于应用程序的日志记录、审计跟踪、权限验证等场景非常有用。

headers消息头自定义属性

headers属性是一个键/值对表,允许用户自定义任意的键和值。键可以是ASCII或Unicode字符串,最大长度为255个字符。而值可以是任何有效的AMQP值类型。

与其他属性不同,headers属性允许你添加任何你想要添加的数据到消息头表中。它还具有另一个独特的功能:RabbitMQ可以根据headers表中填充的值路由消息,而不需要依赖于路由键。

priority优先级属性

在 RabbitMQ 中,消息可以具有一个名为 priority 的属性,用于指定消息的优先级。priority 属性是一个整数值,范围从 0 到 9,其中 0 表示最低优先级,9 表示最高优先级。

通过设置消息的 priority 属性,可以使具有较高优先级的消息在消息队列中被优先处理。RabbitMQ 使用优先级来决定消息的处理顺序。在相同的队列中,具有更高优先级的消息将优先于具有较低优先级的消息被消费。

需要注意的是,RabbitMQ 默认情况下是不支持消息优先级的,除非你在队列的定义中明确启用了消息优先级。在创建队列时,可以通过设置 x-max-priority 参数来启用队列的消息优先级支持。

消费者在接收消息时可以读取消息的 priority 属性,并根据消息的优先级进行相应的处理。具有更高优先级的消息将优先于具有较低优先级的消息被消费。

 

相关文章:

RabbitMQ消息属性详解

content-type属性 如同各种标准化的HTTP规范,content-type传输消息体的MIME类型。例如,如果你的应用程序正在发送JSON序列化的数据值,那么将content-type属性设置为application/json将允许尚待开发的消费者应用程序在收到消息时检查消息类型…...

shader 混合模式

在所有着色器执行完毕,所有纹理都被应用,所有像素准备被呈现到屏幕之后,使用Blend命令来操作这些像素进行混合。 3.2 blend的语法 BlendOff:关闭blend混合(默认值) BlendSrcFactor DstFactor :配置并启动混…...

【大数据工具】Hive 安装

Hive 环境搭建与基本使用 Hive 安装包下载地址:https://dlcdn.apache.org/hive/ 注:安装 Hive 前要先安装好 MySQL 1. MySQL 安装 MySQL 安装包下载地址:https://dev.mysql.com/downloads/mysql/archives/community/MySQL%20::%20Downloa…...

Android9.0 iptables用INetd实现app某个时间段禁止上网的功能实现

1.前言 在9.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置app某个时间段禁止上网的功能,liunx中iptables命令也是比较重要的,接下来就来在INetd这块实现app某个时间段禁止上网的的相关功能,就是在系统中只能允许某个app某个时间段禁止上网,就是…...

webpack.config.js基础配置(五大核心属性)

在上一节webpack零基础入门中我们在安装完webpack 和 webpack-cli依赖之后,直接通过npx webpack ./src/main.js --modedevelopment的方式对src下的js文件进行了打包。 其中的 ./src/main.js: 指定 Webpack 从 main.js 文件开始打包,不但会打包 main.js&a…...

【华为OD机试】阿里巴巴找黄金宝箱(IV)【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地, 藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环, 编号最大的箱子的下一个是编号为0的箱…...

Qt6 C++基础入门2 文件结构与信号和槽

目录 标准文件结构widget.hwidget.cppmain.cpppro 文件 信号与槽自定义信号connect 的两种方式 标准文件结构 widget.h widget 对象的头文件 一般会直接在头文件导入所有后续在 cpp 文件内用到的类,所以 include 基本都会写在这里 // 头文件标志起始 #ifndef WID…...

常用模拟低通滤波器的设计——契比雪夫II型滤波器

常用模拟低通滤波器的设计——契比雪夫II型滤波器 切比雪夫 II 型滤波器的振幅平方函数为: 式中,为有效带通截止频率, 是与通带波纹有关的参量, 大,波纹大,; 为 N 阶契比雪夫多项式。 在 Matl…...

SSM 如何使用 Redis 实现缓存?

SSM 如何使用 Redis 实现缓存? Redis 是一个高性能的非关系型数据库,它支持多种数据结构和多种操作,可以用于缓存、队列、计数器等场景。在 SSM(Spring Spring MVC MyBatis)开发中,Redis 可以用来实现数…...

uin-app如何获取微信昵称和头像的博客

在很多应用中都会使用到微信登录功能,这样可以方便用户快速地完成注册、登录等操作。本文将介绍如何通过uin-app获取微信用户的昵称和头像信息。 第一步:准备开发环境 首先,需要下载并安装QQ精简版开发工具(uin-app)…...

第六十七天学习记录:对陈正冲编著《C 语言深度解剖》中关于变量命名规则的学习

最近开始在阅读陈正冲编著的《C 语言深度解剖》,还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中,偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知…...

matlab 计算点云的线性指数

目录 一、算法原理二、代码实现三、结果展示一、算法原理 选取当前点 p i ( x , y , z ) p_{i}(x,y,z) p<...

SpringBoot集成ElasticSearch

文章目录 前言一、ElasticSearch本地环境搭建二、SpringBoot整合ElasticSearch1.pom中引入ES依赖2.application.yaml配置elasticsearch3.ElasticSearchClientConnect连接ES客户端工具类4.ElasticSearchResult封装响应结果5.Person实体类6.Person实体类7.ElasticsearchControlle…...

分治入门+例题

目录 &#x1f947;2.3.2 合并排序 &#x1f947;2.3.3 快速排序 &#x1f33c;P1010 [NOIP1998 普及组] 幂次方 &#x1f333;总结 形象点&#xff0c;分治正如“凡治众如治寡&#xff0c;分数是也”&#xff0c;管理少数几个人&#xff0c;即可统领全军 本质&#xff…...

剑指offer打卡

这里写目录标题 day1 二叉树和为某一路径day2复杂链表的复刻day3二叉搜索树与双向链表day4数字排列day5找出出现次数超过一半的次数day6 二进制中1的个数day7 二叉树的最近公共祖先day8 字符串转换为整数day9 构建乘积数组day10不用加减乘除的加法day11求12....nday11 股票的最…...

运维实用脚本整理

运维实用脚本整理 本文脚本仅供参考运维排查问题思路运维排查问题的方法和命令&#xff08;1&#xff09;尽可能搞清楚问题的前因后果&#xff08;2&#xff09;有谁在?&#xff08;3&#xff09;之前发生了什么?&#xff08;4&#xff09; 现在在运行的进程是啥?&#xff0…...

INT8 中的稀疏性:加速的训练工作流程和NVIDIA TensorRT 最佳实践

INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践 文章目录 INT8 中的稀疏性&#xff1a;加速的训练工作流程和NVIDIA TensorRT 最佳实践结构稀疏量化在 TensorRT 中部署稀疏量化模型的工作流程案例研究&#xff1a;ResNet-34要求第 1 步&#xff1a;…...

隧道模式HTTP代理使用代码示例

以下是使用Python实现隧道模式HTTP代理的代码示例&#xff1a; python import socket def handle_client(client_socket): # 接收客户端请求 request client_socket.recv(4096) # 解析请求头&#xff0c;获取目标主机和端口号 host request.split(b\r\n)[1].sp…...

翻筋斗觅食海鸥优化算法-附代码

翻筋斗觅食海鸥优化算法 文章目录 翻筋斗觅食海鸥优化算法1.海鸥优化算法2. 改进海鸥优化算法2.1 非线性参数 &#xff21; 策略2.2 翻筋斗觅食策略 3.实验结果4.参考文献5.Matlab代码6.python代码 摘要&#xff1a;针对基本海鸥优化算法(SOA)在处理复杂优化问题中存在低精度、…...

K8S常见应用场景(六)

Kubernetes 是一个可移植的、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 Kubernetes 这个名字源于希腊语&#xff0c;意为“…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...