6.4. 管理操作
无论您使用 JMX 还是 JMS 消息来管理 AMQ Broker,您都可以使用相同的 API 管理操作。使用管理 API,您可以管理代理、地址和队列。
6.4.1. 代理管理操作
您可以使用管理 API 管理代理。
- 列出、创建、部署和销毁队列
可以使用
getQueueNames ()
方法检索已部署队列的列表。可以使用管理操作
createQueue ()
、deployQueue ()
或destroyQueue ()
在ActiveMQServerControl
(通过ObjectName
org.apache.activemq.artemis:broker="BROKER_NAME"或资源名称
)创建或销毁队列。如果队列已存在,而
deployQueue
不执行任何操作,则createQueue
将失败。- 暂停和恢复队列
-
QueueControl
可以暂停并恢复底层队列。当队列暂停时,它将接收消息,但不会发送它们。当它被恢复时,它将开始发送排队的消息(若有)。 - 列出和关闭远程连接
使用
listRemoteAddresses ()
检索客户端的远程地址。也可以使用closeConnectionsForAddress ()
方法关闭与远程地址关联的连接。或者,使用
listConnectionIDs ()
列出连接 ID,并使用listSessions ()
列出给定连接 ID 的所有会话。- 管理事务
如果代理崩溃,当代理重启时,一些事务可能需要人工干预。使用以下方法帮助您解决遇到的问题。
使用
listPreparedTransactions ()
方法列表,列出处于准备状态(事务表示为不透明 Base64 字符串)的事务。使用
commitPreparedTransaction ()
或rollbackPreparedTransaction
() 提交或回滚给定准备的事务,以解析繁体事务。使用
listHeuristicCommittedTransactions ()
和listHeuristicRolledBackTransactions
方法列出自己已完成的事务。- 启用和重置消息计数器
使用
enableMessageCounters ()
或disableMessageCounters ()
方法启用和禁用消息计数器。使用
resetAllMessageCounters ()
和resetAllMessageCounterHistories ()
方法重置消息计数器。- 检索代理配置和属性
-
ActiveMQServerControl
通过其所有属性(例如getVersion ()
方法)公开代理的配置,以检索代理的版本等。 - 列出、创建和销毁 Core Bridge 和 diverts
分别使用
getBridgeNames ()
和getDivertNames ()
方法列出部署的 Core Bridge 和 diverts。使用 bridge 创建或销毁,并使用
createBridge ()
和destroyDivert ()
和createDivert ()
和destroyDivert ()
(带有ObjectName
org.apache.activemq.artemis:broker="BROKER_NAME"
或 resource nameserver
)。- 停止代理并强制故障转移在任何当前附加的客户端中发生
在
ActiveMQServerControl
上使用forceFailover ()
(带有ObjectName
org.apache.activemq.artemis:broker="BROKER_NAME"
或资源名称服务器
)注意由于此方法实际停止代理,因此您可能会收到错误。确切的错误取决于您用来调用方法的管理服务。
6.4.2. 地址管理操作
您可以使用管理 API 管理地址。
使用带有 ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ", component=addresses,address=" <address-name> " 或 resourcename address. <address-
name& gt; 的
。
AddressControl
类来管理地址
使用 addRole ()
或 removeRole ()
方法修改地址的角色和权限。您可以使用 getRoles ()
方法列出与队列关联的所有角色。
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> " 或 resource name
queue . <queue-name
>)。
队列上的大多数管理操作都使用单个消息 ID (例如,删除单个消息)或过滤器(例如,使用给定属性使所有消息过期)。
- 过期、发送到死信地址并移动消息
使用
expireMessages ()
方法使来自队列的消息过期。如果定义了到期地址,则消息将发送到此地址,否则会丢弃它们。您可以在broker.xml
配置文件的address-settings
项中为地址 或一组 地址(以及绑定到这些地址的队列)定义到期地址。例如,请参阅 了解默认代理配置 中的"默认消息地址设置"部分。使用
sendMessagesToDeadLetterAddress ()
方法将消息发送到死信地址。这个方法返回发送到死信地址的消息数。如果定义了死信地址,消息将发送到此地址,否则它们将从队列中删除并丢弃。您可以在broker.xml
配置文件的address-settings
项中为地址 或一组 地址(以及绑定到这些地址的队列)定义死信地址。例如,请参阅 了解默认代理配置 中的"默认消息地址设置"部分。使用
moveMessages ()
方法将消息从一个队列移到另一个队列。- 列出和删除消息
使用
listMessages ()
方法列出来自队列的消息。它将返回一个Map
的数组,每个消息都有一个Map
。使用
removeMessages ()
方法从队列中删除消息,该方法为单个消息 ID 变体返回布尔值
,或者过滤器变体删除的消息数量。此方法采用过滤器参数
来仅删除过滤的消息。将过滤器设置为空字符串将生效时删除所有消息。- 计算消息
-
队列中的消息数量由
getMessageCount ()
方法返回。或者,countMessages ()
将返回与给定过滤器匹配的队列中的消息数量。 - 更改消息优先级
-
可以使用
changeMessagesPriority ()
方法来更改消息优先级,该方法为单个消息 ID 变体返回布尔值
,或者过滤器变体的更新消息数量。 - 消息计数器
-
可以为带有
listMessageCounter ()
和listMessageCounterHistory ()
方法的队列列出消息计数器(请参阅 第 6.6 节 “使用消息计数器”)。也可以使用resetMessageCounter ()
方法为单个队列重置消息计数器。 - 检索队列属性
-
QueueControl
通过其属性(如getFilter ()
)公开队列设置(例如,getFilter()
)用于检索队列的过滤器(如果创建了队列,则知道队列是否持久等)。 - 暂停和恢复队列
-
QueueControl
可以暂停并恢复底层队列。当队列暂停时,它将接收消息,但不会发送它们。当它被恢复时,它将开始发送排队的消息(若有)。
6.4.4. 远程资源管理操作
您可以使用管理 API 启动和停止代理的远程资源(接受器、分离、桥接等),以便在不完全停止的情况下,代理可以离线。
- acceptors
-
使用
start ()
或.AcceptorControl
类上的stop ()
方法(使用ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=acceptors,name=" <acceptor-name> " 或 resource name
acceptor. <address-name
>))。acceptor 参数可以使用AcceptorControl
属性来检索。有关 Acceptors 的更多信息,请参阅 Network Connections: Acceptors 和 Connectors。 - diverts
-
使用
DivertControl
类上的start ()
或stop ()
方法(带有ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=diverts,name=" <divert-name> " 或 resource name
divert. <divert-name> )来启动或停止一个 divert
。可使用DivertControl
属性来检索 divert 参数。 - bridge
-
使用
start ()
(resp)启动或停止网桥。BridgeControl
类上的stop ()
)方法(带有ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=bridge,name=" <bridge-name> " 或 resource name
bridge. <bridge-name
>))。网桥参数可以使用BridgeControl
属性来检索。 - 广播组
-
在
BroadcastGroupControl
类上使用start ()
或stop ()
方法启动或停止广播组(带有ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=broadcast-group,name=" <broadcast-group-name> " 或 resource name
broadcastgroup. <broadcast-group-name>
)。可以使用BroadcastGroupControl
属性来检索广播组参数。如需更多信息,请参阅 Broker 发现方法。 - 发现组
-
使用
DiscoveryGroupControl
类上的start ()
或stop ()
方法启动或停止发现组(使用ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=discovery-group,name=" <discovery-group-name> " 或 resource name
discovery. <discovery-group-name>
)。发现组参数可以使用DiscoveryGroupControl
属性来检索。如需更多信息,请参阅 Broker 发现方法。 - 集群连接
-
使用
ClusterConnectionControl
类上的start ()
或stop ()
方法启动或停止集群连接(使用ObjectName
org.apache.activemq.artemis:broker=" <broker-name> ",component=cluster-connection,name=" <cluster-connection-name> " 或 resource name
clusterconnection. <cluster-connection-name>
)。可以使用ClusterConnectionControl
属性来检索集群连接参数。如需更多信息,请参阅 创建代理集群。