RabbitMQ:Queue的介绍和使用

2023-11-09

1.声明

当前内容用于本人学习和使用当前的Queue,当前内容为RabbitMQ中对Queue的介绍

当前内容来源:RabbitMQ中的Queue

2.Queue的官方介绍

首先先分析以下前面的Queue的使用,其实这个东西就是一个队列,一个存储消息的队列,并且可以持久化,而且这个队列中的消息可以被消费,如果出现死信则是死信队列,死信队列也是可以被处理的

接下来就是官方介绍

Queues in the AMQP 0-9-1 model are very similar to queues in other message- and task-queueing systems: they store messages that are consumed by applications. Queues share some properties with exchanges, but also have some additional properties:

这里的意思是:Queue在这个AMQP 0-9-1模型中和消息队列和任务队列系统是非常类似的:他们都是存储消息然后再程序中被消费。队列可以共享一些属性到交换机中,单同样有一些其他的属性

官方属性

  1. Name
  2. Durable (the queue will survive a broker restart)
  3. Exclusive (used by only one connection and the queue will be deleted when that connection closes)
  4. Auto-delete (queue that has had at least one consumer is deleted when last consumer unsubscribes)
  5. Arguments (optional; used by plugins and broker-specific features such as message TTL, queue length limit, etc)

翻译过来就是

  1. 当前的queue具有名称name属性
  2. Excusive属性(只能用在一个连接上面,如果这个唯一的连接都关闭那么这个队列将被删除)
  3. 自动删除属性(队列至少有一个消费者,如果这个最后一个消费者都没了,那么这个队列将被删除)
  4. 参数(由插件和特定于代理的功能使用,例如消息TTL,队列长度限制等)

我们发现了这个可以通过为该队列添加参数从而限制当前队列的长度

接下来的因该就是使用建议

Before a queue can be used it has to be declared. Declaring a queue will cause it to be created if it does not already exist. The declaration will have no effect if the queue does already exist and its attributes are the same as those in the declaration. When the existing queue attributes are not the same as those in the declaration a channel-level exception with code 406 (PRECONDITION_FAILED) will be raised.

应该先声明一个队列然后再使用。如果声明一个队列不存在那么它将被常见。如果这个队列再声明的时候已经存在了,并且属性都一直不会有问题。如果这个声明的时候的属性和已经存在的队列的属性存在冲突或者不一致,那么将出现channel-level 异常,并且为406代码

3.测试声明queue的使用建议

1.创建406错误,制造属性冲突

public class QueueCreateTest {
	public static void main(String[] args) throws Exception {
		RabbitMqUtils mqUtils = new RabbitMqUtils();
		mqUtils.reciver("hello", true,(x, y) -> {
			System.out.println(new String(y.getBody(), "utf-8"));
		});
	}
}

启动结果
在这里插入图片描述
直接典型的406错误,是哪里不一致呢?,这个是要看我们创建hello的时候使用的属性

使用当前rabbitMQ的api方式查看所有queue:http://localhost:15672/api/queues

最后找到hello的属性,下面是提取后的数据

        "auto_delete":false,
        "consumer_utilisation":null,
        "consumers":0,
        "durable":false,       
        "exclusive":false,
        "idle_since":"2020-05-13 10:45:16",
        "messages":0,
        "messages_details":{
            "rate":0
        },
        "messages_unacknowledged_ram":0,
        "name":"hello",
        "node":"rabbit@LAPTOP-KLPPTN3T",
        "single_active_consumer_tag":null,
        "state":"running",
        "type":"classic",
        "vhost":"/"

对比发现durable属性不一致,所以导致的错误

修改这个durable就是第二个参数为false即可
在这里插入图片描述

4.官方的Queue Name

Queue Names
Applications may pick queue names or ask the broker to generate a name for them. Queue names may be up to 255 bytes of UTF-8 characters. An AMQP 0-9-1 broker can generate a unique queue name on behalf of an app. To use this feature, pass an empty string as the queue name argument. The generated name will be returned to the client with queue declaration response.

Queue names starting with “amq.” are reserved for internal use by the broker. Attempts to declare a queue with a name that violates this rule will result in a channel-level exception with reply code 403 (ACCESS_REFUSED).

翻译后的结果
应用程序可以选择队列名称,也可以要求代理为它们生成名称,队列名称应该再255个utf-8字符.一个AMQP 0-9-1代理可以在一个app中生成一个唯一的队列名称。使用这个代理方式生成应该传递一个空的队列名称,然后这个创建的名称将会以响应的方式返回

如果使用amp.开头的队列是当前内部系统所使用的,如果声明一个这样开头的队列名称将会触发一个异常,并返回403

通过这个简介,发现可以直接传递一个没有名字的队列名称过去让当前的代理自动创建一个唯一的队列名称并返回,我们不能使用amp.开头的,这是系统内部使用的,如果尝试创建以amp.开头则会出现异常

下面是测试使用AMQP 0-9-1代理生成一个唯一的队列

public class QueueNameCreateTest {
	public static void main(String[] args) throws Exception {
		RabbitMqUtils mqUtils = new RabbitMqUtils();
		mqUtils.reciver("", false,(x, y) -> {
			System.out.println(new String(y.getBody(), "utf-8"));
		});
	}
}

直接声明一个“”字符的队列,然后查看结果
在这里插入图片描述
发现创建了一个amp.genXXX之类的一个唯一的queue名称

控制台结果
在这里插入图片描述
测试成功

5.官方的Queue Durability

Queue Durability
Durable queues are persisted to disk and thus survive broker restarts. Queues that are not durable are called transient. Not all scenarios and use cases mandate queues to be durable.

Durability of a queue does not make messages that are routed to that queue durable. If broker is taken down and then brought back up, durable queue will be re-declared during broker startup, however, only persistent messages will be recovered.

翻译过来就是

队列持久化

持久化可以保存到硬盘上面,可以重启后恢复。如果不启用持久化默认就是瞬时的,并非所有的队列都需要被持久化

队列持久化不会让消息从路由到队列持久化(就是消息从路由到队列的时候并不是持久化的),如果当前的代理关闭,那么将会被备份,代理重启之后持久化队列就会将被加载,但是只有消息持久化被恢复

分析发现:消息持久化、队列持久化、exchange持久化

  1. 在如果想实现消息宕机恢复,就必然开启队列持久化和exchange持久化
  2. 但是消息持久化才是消息被恢复的(如果开启消息持久化)

6.总结

1.从当前的RabbitMQ的Queue的介绍发现,默认声明一个队列的时候可以不提供名称指定为""空字符串,则会让AMQP代理自动创建一个唯一的Queue的名称

2.如果声明的Queue已经存在了,那么就会出现参数校验,如果参数不同则报错

3.Queue可以被持久化到磁盘,宕机后可以恢复Queue,但是消息必须是持久化的,如果消息不是持久化那么可能出现消息丢失的情况

以上纯属个人见解,如有问题请联系本人!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ:Queue的介绍和使用 的相关文章

  • Docker安装RockerMQ消息队列

    文章目录 1 安装namesrv2 安装broker3 安装console xff08 可选 xff09 1 安装namesrv namesrv就类似于消息队列的注册中心 span class token function docker s
  • FreeRTOS消息队列、信号量、事件组、任务通知之间的总结

    转载自 xff1a FreeRTOS消息队列 信号量 事件标志组 任务通知 丨匿名用户丨的博客 CSDN博客 功能及区别列表 消息队列 xff08 需要传递消息时使用 xff09 在任务与任务间 中断和任务间传递信息 xff0c 可以数据传
  • FreeRTOS消息队列

    FreeRTOS消息队列 队列又称消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 队列可以在任务与任务间 中断和任务间传递信息 xff0c 实现了任务接收来自其他任务或中断的不固定长度的消息 xff0c 任务能够从队列里
  • C语言 消息队列

    消息队列 xff08 也叫做报文队列 xff09 能够克服早期unix通信机制的一些缺点 作为早期unix通信机制之一的信号能够传送的信息量有限 xff0c 后来虽然POSIX 1003 1b在信号的实时性方面作了拓广 xff0c 使得信号
  • Rocketmq发送顺序消息

    要想保证消息的顺序性 要保证将需要保证顺序的消息按照顺序投递进一个队列中 下面演示rocketTemplate发送顺序消息 RestController RequestMapping demo public class SendContro
  • RocketMQ中文文档(译)

    前言 近日需要研究一下RocketMQ 为了方便日后查找 因此对官方英文文档进行翻译记载 也希望能帮助到要学习的朋友 阅读后发现 文档还是比较粗略的 大概也只能了解些概念和简单实用 快速入门部分比较简单 因此暂时没翻译只翻译其中重要的几个部
  • RocketMQ学习笔记 - 顺序消息

    文章目录 1 定义 2 代码示例 2 1 消息实体 2 2 生产者 2 3 消费者 2 3 测试结果 1 定义 顺序消息 FIFO 消息 是 MQ 提供的一种严格按照顺序进行发布和消费的消息类型 顺序消息由两个部分组成 顺序发布和顺序消费
  • 06-分布式消息队列Kafka

    目录 一 简介 1 什么是kafka 1 1 概念 1 2 特性 2 应用场景 二 原理 1 基本概念 1 1 Broker 代理 1 2 Topic 主题 1 3 Partition 分区 1 4 Replication 副本 1 5 P
  • RabbitMQ的安装

    一 安装erlang环境 官网下载 http www erlang org downloads 这个文件其实不是gz格式的 使用file otp src 20 1 tar gz可以查看它的真实数据格式 解压 tar xvf otp src
  • 延时消息队列

    目录 前言 一 延时队列实用场景 二 DelayQueue DelayQueue的实现 使用延迟队列 DelayQueue实现延时任务的优缺点 三 RocketMQ 原理 四 Kafka 原理 实现 DelayMessage定义 消息发送代
  • RabbitMQ消息队列实战(1)—— RabbitMQ的体系

    RabbitMQ是一个开源的消息代理和队列服务器 用来在不同的应用之间共享数据 1983年 被认为是RabbitMQ的雏形的Teknekron创建 首次提出了消息总线的概念 中间经历过数个阶段的发展 一直到2004年 AMQP Advanc
  • rocketMq消息队列原生api使用以及rocketMq整合springboot

    rocketMq消息队列 文章目录 rocketMq消息队列 一 RocketMQ原生API使用 1 测试环境搭建 2 RocketMQ的编程模型 3 RocketMQ的消息样例 3 1 基本样例 3 2 顺序消息 3 3 广播消息 3 4
  • 【RabbitMQ】Consumer之消费模式、消息确认与拒绝 - 基于AMQP 0-9-1

    这篇文章主要和大家分享RabbitMQ Consumer端的知识点 主要包括Consumer的消费模式 消息是如何确认以及如何拒绝的 当消息拒绝之后 如何让消息重新进入队列 推模式 RabbitMQ支持推和拉两种消费模式 推模式就是由Bro
  • (一)调试RocketMq源码

    文章目录 一 启动NameServer 1 1namesrv模块找到NamesrvStartup java 1 2修改配置文件目录 1 3启动NamesrvStartup java 二 配置Broker 2 1配置BrokerStartup
  • Rabbitmq入门到进阶看这篇就够了!

    安装前提 安装 erlang windows用户名非中文 可以关注我的公众号 知识追寻者 回复 rabbitmq 获取已经下载好的安装包和配套源码地址 本套教程对应知识追寻者网址 windows安装rabbitmq zszxz com Ra
  • RabbitMQ理论+实战

    1 引出 1 1 中间件应用场景 1 跨系统数据传输 2 高并发的流量削峰 3 数据的分发与异步处理 4 大数据分析与传递 5 分布式事务 1 2 中间件常用协议 01 什么是协议 所谓协议是指 1 计算机底层操作系统和应用程序通讯时共同遵
  • RocketMQ消费重试问题

    异常现象 监控日志展示如下 2019 10 30 14 31 23 339 INFO ConsumeMessageThread 7 com xxx service mq MQConsumerService 93 消费消息 msgId 0A0
  • 关于rocketmq 中日志文件路径的配置

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 rocketmq 中的数据和日志文件默认都是存储在user home路径下面的 往往我们都需要修改这些路径到指定文件夹以便管理 服务端日志 网
  • ESP32学习笔记05-串口事件方式读取数据

    串口中断方式处理数据 事件机构体 typedef struct uart event type t type lt UART event type size t size lt UART data size for UART DATA ev
  • 高可用:如何实现消息队列的 HA?

    管理学上有一个木桶理论 一只水桶能装多少水取决于它最短的那块木板 这个理论推广到分布式系统的可用性上 就是系统整体的可用性取决于系统中最容易出现故障 或者性能最低的组件 系统中的各个组件都要进行高可用设计 防止单点故障 消息队列也不例外 本

随机推荐

  • 系统更新pip无法使用

    报错信息如下 WARNING pip is configured with locations that require TLS SSL however the ssl module in Python is not available p
  • Hadoop、Spark等5种大数据框架对比,你的项目该用哪种?

    Hadoop Spark等5种大数据框架对比 你的项目该用哪种 2016 11 23 大愚若智 译 InfoQ 作者丨Justin Ellingwood 译者丨大愚若智 审校丨Cindy 本文将介绍并对比5种主流大数据框架 助你更深层次了解
  • 毕业设计 树莓派+云平台实时室内环境监测系统

    文章目录 0 前言 1 简介 2 主要器件 3 DHT11温湿度传感器 4 具体实现 5 部分代码 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学
  • Google浏览器首页被篡改(非常有效的解决方法)

    问题描述 1 本人谷歌浏览器首页被hao 123篡改 2 浏览器输入chrome version 可以看到 命令行 最后面被篡改 解决方法 1 在chrome浏览器输入chrome version gt 复制命令行内容 gt 粘贴到浏览器属
  • 关于区块链的原理:去中心化的分布式记账系统

    区块链技术的核心是所有当前参与的节点共同维护交易及数据库 它使交易基于密码学原理而不基于信任 使得任何达成一致的双方 能够直接进行支付交易 不需第三方的参与 从技术上来讲 区块是一种记录交易的数据结构 反映了一笔交易的资金流向 系统中已经达
  • RFID在图书馆系统管理中的有哪些应用优势?

    RFID在图书馆系统管理中的应用优势 截至目前 基于RFID技术在图书馆行业的应用 算算已有十年有余 从传统的简单的自助借还图书到目前多种智能化功能的实现 其技术发展进步的速度非常迅速 尤其是与传统的条形码和磁条技术相比 具有其明显的优势
  • 交互式SHELL和非交互式SHELL、登录SHELL和非登录SHELL的区别

  • keil5在点击debug时,全速运行按钮不能按的情况

    在我程序编译完成后 下载了程序 点击debug进行调试 跳转到debug页面时 发现 run 按钮已经按下 但是不在运行代码 只是在空跑 出现这种情况 目前有以下几种情况 1 在 options for target 选项中的 target
  • Tableau_day6

    1 填充地图 1 1 各省售电量填充地图 导入数据 设置地理格式 双击 省市 生成一个符号地图 将当期值放入颜色 生成填充地图 在地理面积内进行颜色填充 设置颜色 设置未知 设置 位置 标签 显示位置信息 修改某些位置信息 要调整注释边框
  • 远程调试(Remote Debugging)

    当运行的程序出现问题时 我们通常通过调试来追踪和定位问题 但是 当运行错误的机器上没有调试工具 我们就需要实现远程调试 简单地说 就是要调试的程序和调试器不在一台机器上 移动端web调试 alert虽然是个土方法 但也是万能的 不过这样会中
  • Javascript与CSS在IE和Firefox中的误区及区别

    Javascript中的常见问题 1 集合类对象问题 现有代码中许多集合类对象取用时使用 IE 能接受 Firefox 不能 解决方法 改用 作为下标运算 如 document forms formName 改为 Js代码 document
  • Vm配置虚拟网络信息&配置虚拟机防火墙&取消软件安装限制&解决问题Temporary failure in name resolution

    目录 配置环境 一 前置知识 1 NAT模式 用的比较多 2 桥接模式 3 仅主机模式 二 修改虚拟网卡信息 1 首先我们可以看到我们这里有两张网卡 问题一 你们可以想一下假如我没有桥接到我的真实可以上网的网卡上会怎么样 这种错误我之前犯过
  • Google敦促更快普及VP9视频压缩技术

    转自 http www cnetnews com cn 2013 0516 2159618 shtml CNET科技资讯网 05月16日 国际报道 计算机行业才谈及VP8解编码技术 Google就希望人们接受它的VP9技术了 Google的
  • DES 密钥生成 加密解密

    import java security InvalidKeyException import java security NoSuchAlgorithmException import java security SecureRandom
  • E1,T1, PRI, Trunk

    E1 T1 PRI Trunk 北美的24路脉码调制PCM简称T1 速率是1 544Mbit s 欧洲的30路脉码调制PCM简称E1 速率是2 048Mbit s 我国采用的是欧洲的E1标准 E1的一个时分复用帧 其长度T 125us 共划
  • read_csv文件读写参数详解————

    python pandas IO tools 之csv文件读写 英文原文 pandas IO tools 读取csv文件 pd read csv 写入csv文件 pd to csv pandas还可以读取一下文件 read csv read
  • .NET诞生20周年 .NET 7有什么新东西?

    首个预览版已发布 NET 7 有什么新东西 随着第一个预览版发布 NET 7 渐渐浮出水面 NET 高级项目经理 Jeremy Likness 在官方博客中介绍了 NET 7 的主要发展方向 俺整理给大伙做一下介绍 NET 7 建立在 NE
  • 实训二十二:交换机标准 ACL 配置

    一 实验目的 1 了解什么是标准的 ACl 2 了解标准 ACL 不同的实现方法 二 应用环境 1 ACL Access Control Lists 是交换机实现的一种数据包过滤机制 通过允许或拒绝特定的数据包进出网络 交换机可以对网络访问
  • Uoj 33 树上GCD (树分治)

    include
  • RabbitMQ:Queue的介绍和使用

    1 声明 当前内容用于本人学习和使用当前的Queue 当前内容为RabbitMQ中对Queue的介绍 当前内容来源 RabbitMQ中的Queue 2 Queue的官方介绍 首先先分析以下前面的Queue的使用 其实这个东西就是一个队列 一