6.4.3. 队列管理操作

您可以使用管理 API 管理队列。

核心管理 API 处理队列。QueueControl 类定义队列管理操作(使用 ObjectName,org.apache.activemq.artemis:broker="<broker-name>",component=addresses,address="<bound-address>", subcomponent=queues,routing-type="<routing-type>",queue="<queue-name>" 或资源名称 queue.<queue-name>

队列上的大多数管理操作采用单个消息 ID(例如,删除单个消息)或过滤器(例如,使所有消息通过给定属性过期)。

使消息过期、发送到死信地址并移动消息

使用 expireMessages() 方法从队列中过期消息。如果定义了到期地址,则会将消息发送到此地址,否则它们将丢弃。您可以在 broker.xml 配置文件的 address-settings 元素中定义地址或地址 集合 的到期地址(以及绑定到这些地址的队列)。例如,请参阅了解 default 代理配置 中的"默认消息地址设置"部分。

使用 sendMessagesToDeadLetterAddress() 方法将消息发送到死信地址。此方法返回发送到死信地址的消息数。如果定义了死信地址,消息将发送到此地址,否则它们将从队列中删除并丢弃。您可以在 broker.xml 配置文件的 address-settings 元素中为地址或地址 集合 (以及绑定到这些地址的队列)定义死信地址。例如,请参阅了解 default 代理配置 中的"默认消息地址设置"部分。

使用 moveMessages() 方法将消息从一个队列移到另一个队列。

列出和删除消息

使用 listMessages() 方法列出来自队列的消息。它将 为每个 邮件返回一系列 map,一个 map。

使用 removeMessages() 方法从队列中删除消息,该方法为单个消息 ID 变体返回 布尔值 或过滤器变体的已删除消息数。此方法采用 过滤器 参数,以仅删除过滤后的消息。将过滤器设置为空字符串将实际删除所有消息。

计算信息
队列中的消息数通过 getMessageCount() 方法返回。或者,countMessages() 将返回队列中与给定过滤器匹配的消息数。
更改消息优先级
可以使用 changeMessagesPriority() 方法更改消息优先级,该方法可返回单个消息 ID 变体的 布尔值 或过滤器变体的更新消息数。
消息计数器
可以使用 listMessageCounter()和 listMessageCounterHistory()方法 为队列列出消息计数器( 请参阅 第 6.6 节 “使用消息计数器”)。也可以使用 resetMessageCounter() 方法为单个队列重置消息计数器。
检索队列属性
QueueControl 通过其属性公开队列设置(例如 getFilter(),用于检索队列的过滤器(如果使用某个队列创建,则为 isDurable()) 以了解队列是否持久等。
暂停和恢复队列
QueueControl 可以暂停并恢复底层队列。暂停队列后,它将接收消息,但不会发送邮件。恢复之后,它将开始发送已排队的消息(如果有)。