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"或资源名称服务器 )来创建或销毁队列。

如果队列已存在,则 createQueue 将失败,而 deployQueue 将不执行任何操作。

暂停和恢复队列
QueueControl 可以暂停并恢复底层队列。当队列暂停时,它将接收消息,但不会发送消息。恢复后,它将开始提供排队的消息(若有)。
列出和关闭远程连接

使用 listRemoteAddresses () 检索客户端的远程地址。也可以使用 closeConnectionsForAddress () 方法关闭与远程地址关联的连接。

或者,使用 listConnectionIDs () 列出连接 ID,并使用 listSessions () 列出给定连接 ID 的所有会话。

管理事务

如果代理崩溃,当代理重启时,一些事务可能需要手动干预。使用以下方法帮助您解决问题。

使用 listPreparedTransactions () 方法列表列出处于准备状态的事务(事务表示为 opaque Base64 String)。

使用 commitPreparedTransaction ()rollbackPreparedTransaction () 提交或回滚给定准备的事务,以解决高度事务的问题。

使用 listHeuristic CommittedTransactions ()和 listHeur isticRolledBackTransactions 方法,列出大量完成的事务。

启用和重置消息计数器

使用 enableMessageCounters ()disableMessageCounters () 方法启用和禁用消息计数器。

使用 resetAllMessageCounters ()resetAllMessageCounterHistories () 方法重置消息计数器。

检索代理配置和属性
ActiveMQServerControl 通过其所有属性(如 getVersion () 方法)公开代理的配置,以检索代理的版本,等等。
列出、创建和销毁 Core Bridge 和 diverts

列出部署的 Core Bridge,并分别使用 getBridgeNames ()getDivertNames () 方法进行 diverts。

使用网桥创建或销毁,并使用 createBridge ()destroyBridge ()createDivert ()destroyDivert () (通过 object Name org.apache.activemq.artemis:broker="BROKER_NAME" 或 resource name server)。

停止代理并强制故障切换在任何当前附加的客户端中发生

使用 ActiveMQServerControl 上的 forceFailover () (带有 ObjectName org.apache.activemq.artemis:broker="BROKER_NAME" 或资源 名称服务器

注意

由于此方法实际上停止代理,您可能会收到错误。确切的错误取决于您用来调用方法的管理服务。

6.4.2. 地址管理操作

您可以使用管理 API 管理地址。

使用带有 ObjectName org.apache.activemq.artemis:broker=" <broker-name&gt; ", component=addresses,address=" &lt;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>" 或资源名称 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 () 方法(带有 ObjectName org.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 (使用 ObjectName org.apache.activemq.artemis:broker=" <broker-name> ",component=diverts,name=" <divert-name> " 或资源名称 divert. <divert-name>)。可使用 DivertControl 属性检索 divert 参数。
网桥
使用 start () (resp)启动或停止网桥。BridgeControl 类上的 stop ()方法(带有 ObjectName org.apache.activemq.artemis:broker=" <broker-name&gt; ",component=bridge,name=" <bridge-name>" 或资源名称 bridge. <bridge-name>)。可以使用 BridgeControl 属性检索网桥参数。
广播组
BroadcastGroupControl 类中使用 start ()stop () 方法启动或停止广播组(使用 ObjectName org.apache.activemq.artemis:broker=" <broker-name> ",component=broadcast-group,name=" <broadcast-group-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> " 或资源名称 discovery . <discovery-group-name>)。发现组参数可以使用 DiscoveryGroupControl 属性来检索。如需更多信息,请参阅 Broker 发现方法
集群连接
使用 ClusterConnectionControl 类上的 start ()stop () 方法启动或停止集群连接(使用 ObjectName org.apache.activemq.artemis:broker=" <broker-name> ",component=cluster-connection,name=" <cluster-connection-name> " 或资源名称 clusterconnection. <cluster-connection-name>)。集群连接参数可以使用 ClusterConnectionControl 属性来检索。如需更多信息,请参阅 创建代理集群
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat