5.4.3. 队列管理操作
您可以使用 management 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>"
或 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()
方法为队列列出消息计数器(请参阅 第 5.6 节 “使用消息计数器”)。也可以利用resetMessageCounter()
方法为单个队列重置消息计数器。 - 检索队列属性
-
QueueControl
通过其属性公开队列设置(例如,getFilter()
会在创建队列时检索队列的过滤器,即isDurable()
以了解队列是否持久,等等)。 - 暂停和恢复队列
-
QueueControl
可以暂停并恢复底层队列。当队列暂停时,它将接收信息,但不会发送它们。恢复后,它将开始传送排队的消息(如果有)。