Queue是指消息队列,云消息队列 RabbitMQ 版的消息都会被投入到一个或多个Queue中。本文介绍如何在云消息队列 RabbitMQ 版控制台创建消息的存储资源Queue、查看Dashboard大盘、被Exchange绑定、向指定Queue发送消息、查看Consumer Tag、清空Queue和删除Queue。
背景信息
Consumer Tag是Consumer客户端的标识符。您可以在云消息队列 RabbitMQ 版的Consumer客户端设置Consumer Tag。如果您没有在云消息队列 RabbitMQ 版的Consumer客户端设置Consumer Tag,云消息队列 RabbitMQ 版服务端会为您自动生成一个唯一的Consumer Tag。建议使用系统默认Consumer Tag,不自定义设置Consumer Tag。
Consumer Tag必须保持唯一,即已被某个Consumer使用的Consumer Tag不可同时被另一个Consumer使用。
客户端使用的SDK在记录连接上有哪些消费者时,采用Map<String, Consumer>进行记录,其中Key为Consumer Tag。如果一个连接上存在多个消费者具有相同的Consumer Tag,在连接自动重连后,该连接下的相同Consumer Tag仅会有一个消费者恢复消费,其他消费者将不会自动恢复。
创建Queue
登录云消息队列 RabbitMQ 版控制台,然后在左侧导航栏选择实例列表。
在实例列表页面的顶部菜单栏选择地域,然后在实例列表中,单击目标实例名称。
在左侧导航栏,单击Queue 列表。
在Queue 列表页面,在当前 Vhost右侧的切换下拉列表中,选择Vhost,单击创建 Queue。
在创建 Queue面板,配置以下参数,然后单击确定。
参数
描述
说明
Queue 名称
Queue的名称
只能包含字母、数字、短划线(-)、下划线(_)、半角句号(.)、井号(#)、正斜线(/)、at符号(@)。
长度限制在1~255字符。
创建后无法修改,只能删除重建。
以amq.开头的为保留字段,因此不能使用。例如:amq.test。
Auto Delete
最后一个Consumer取消订阅后,Queue是否自动删除。
true:在订阅该Queue消息的最后一个Consumer取消订阅该Queue的消息后,自动删除该Queue。
false:在订阅该Queue消息的最后一个Consumer取消订阅该Queue的消息后,不自动删除该Queue。
重试策略
配置Queue重试策略。各实例策略参数取值,请参见实例重试策略参数说明。
是否继承实例配置:
是:继承实例默认配置。
否:自定义配置。
最大投递次数:系统将一条消息尝试投递给消费者的最大次数限制。单位:次。
消费超时时间:消费者在接收和处理消息时允许的最大时间限制。单位:秒。
死信策略
Queue的参数设置,可用于设置死信Exchange、死信Routing Key和消息存活时间。
DeadLetterExchange:指定死信消息发送的目标Exchange。
DeadLetterRoutingKey:指定死信消息的Routing Key,即死信Exchange会将消息发送至匹配该死信Routing Key所对应的Queue。
MessageTTL:消息存活时间,单位毫秒(ms)。在指定时间内未被成功消费的消息会变成死信消息,该消息将会被发送到死信Exchange。更多信息,请参见消息存活时间。
常见问题
能否指定特定客户端消费消息?
目前不支持指定特定客户端消费消息。消息分发遵循 RabbitMQ 标准机制,按轮询(Round-Robin)或优先级(Priority)策略在各 Consumer 客户端间分配,无法将消息固定发送给特定客户端。
如何通过代码创建顺序队列(x-single-active-consumer)?
控制台暂不支持配置 x-single-active-consumer 参数,需通过 SDK 代码创建顺序队列。创建时,使用 channel.queueDeclare 方法,并在 arguments 参数中设置 "x-single-active-consumer": true。示例如下:
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-single-active-consumer", true);
channel.queueDeclare("your-queue-name", true, false, false, arguments);为什么代码自动创建队列失败(Failed to declare queue)?
云消息队列 RabbitMQ 版不支持通过代码自动创建队列(Auto-create)。使用队列前,必须先在控制台或通过 API 手动创建 Queue,再在代码中使用 channel.queueDeclare 绑定已有的 Queue,否则将报错 Failed to declare queue。
Queue 最大限制个数调整
如果实例可创建的 Queue 数量已达到上限,可根据实例类型通过以下方式调整:
企业版、专业版、铂金版实例:在实例详情页或实例列表的操作区,单击升配,前往购买页面完成升配。
(共享)按累积量、(共享)预留+弹性、(独享)预留+弹性实例:在实例详情页右上角,单击修改配额,调整 Queue 数量上限。
各实例类型可支持的 Queue 数量上限,请参见使用限制中、集群限制下的「单实例可创建的 Queue 数量」。
查看统计数据
您可以查看各种指标数据,帮助您及时发现和定位问题。
查看Consumer Tag
云消息队列 RabbitMQ 版仅支持查看在线Consumer客户端的Consumer Tag,不支持查看离线Consumer客户端的Consumer Tag,您需要确保要查看Consumer Tag的Consumer客户端处于在线状态。
在Queue 列表页面,选择指定Queue,在其操作列,选择。
被Exchange绑定
在Queue 列表页面,选择指定Queue,在其操作列单击详情。
在Queue 详情页面单击被绑定信息页签,单击添加被绑定。
在添加被绑定面板,选择源Exchange,在Routing Key文本框输入Routing Key,然后单击确定。
说明若被绑定的Exchange的类型为x-consistent-hash时,Routing Key表示绑定的Queue的权重,只能设置为整数,取值范围为[1~20]。
发送消息
Queue添加被绑定关系后,可直接在控制台发送消息,将消息从源Exchange发送到指定的Queue中。
在Queue 列表页面,选择指定Queue,在其操作列单击详情。
在Queue 详情页面,选择被绑定信息页签。
在被绑定关系列表中,选择指定的绑定关系,在其操作列单击发送消息。
在弹出的发送消息面板中输入messageId和messageBody,然后单击确定。
当使用默认 Exchange(exchange 为空)发送消息时,Routing Key 必须与已存在的 Queue 名称完全一致;同时,客户端账号需拥有对该 Queue 的写权限。若 Queue 不存在或权限不足,消息将被丢弃,且控制台无发送记录。
清空Queue
在Queue 列表页面,选择指定Queue,在其操作列,选择。
删除Queue
删除Queue时,Queue中未被消费的消息会被同时删除,且不可恢复。请您谨慎操作。
在Queue 列表页面,根据需要选择如下任意一种方式删除Queue。
删除单个Queue:找到要删除的Queue,在其右侧操作列,选择。
您也可以单击目标Queue,或在其右侧操作列,单击详情,在Queue 详情页面右上角单击删除。
删除多个Queue:选中要删除的Queue,单击Queue列表下方的批量删除。
在提示对话框,认真阅读提示信息,单击确认。