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