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