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