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()和
请参阅 第 6.6 节 “使用消息计数器”)。也可以使用listMessageCounterHistory()方法为队列列出消息计数器(resetMessageCounter()方法为单个队列重置消息计数器。 - 检索队列属性
-
QueueControl通过其属性公开队列设置(例如getFilter(),用于检索队列的过滤器(如果使用某个队列创建,则为 isDurable())以了解队列是否持久等。 - 暂停和恢复队列
-
QueueControl可以暂停并恢复底层队列。暂停队列后,它将接收消息,但不会发送邮件。恢复之后,它将开始发送已排队的消息(如果有)。