管理 AMQ Broker

Red Hat AMQ 2021.Q3

用于 AMQ Broker 7.9

摘要

本指南描述了如何监控、管理和升级 AMQ Broker。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 CTO Chris Wright 的信息

第 1 章 概述

AMQ Broker 是基于 ActiveMQ Artemis 的高性能消息传递实施。它具有快速、基于日志的消息持久性,支持多种语言、协议和平台。

AMQ 代理提供多个用于管理和交互代理实例的接口,如管理控制台、管理 API 和命令行界面。另外,您还可以通过收集运行时指标来监控代理性能,配置代理以主动监控死锁状况,并以交互方式检查代理和队列的健康状态。

本指南提供有关典型代理管理任务的详细信息,例如:

  • 升级代理实例
  • 使用命令行界面和管理 API
  • 检查代理和队列的健康状况
  • 收集代理运行时指标
  • 主动监控关键代理操作

1.1. 支持的配置

有关AMQ Broker 支持的配置的当前信息,请参阅红帽客户门户网站中的"Red Hat AMQ 7支持的配置"文章。

1.2. 文档惯例

本文档对 sudo 命令、文件路径和可替换值使用以下惯例:

sudo 命令

在本文档中,sudo 用于任何需要 root 特权的命令。使用 sudo 时,您应始终谨慎操作,因为任何更改都可能会影响整个系统。

有关使用 sudo 的更多信息,请参阅 sudo 命令

关于在此文档中使用文件路径

在这个文档中,所有文件路径都对 Linux、UNIX 和类似操作系统(例如 /home/...)有效。如果您使用的是 Microsoft Windows,则应使用等效的 Microsoft Windows 路径(例如,C:\Users\...)。

可替换值

本文档有时会使用可替换值,您必须将这些值替换为特定于环境的值。可替换的值为小写,用方括号(<>)括起,样式则使用斜体和 单空间 字体。用下划线(_)分隔多个词语。

例如,在以下命令中,将 <install_dir> 替换为您自己的目录名称。

$ <install_dir>/bin/artemis create mybroker

第 2 章 升级代理

2.1. 关于升级

红帽向 客户门户 发布 AMQ Broker 的新版本。将代理更新至最新版本,以确保您有最新的增强和修复。通常,红帽以以下三种方式之一发布 AMQ Broker 的新版本:

主版本
当应用程序从一个主版本转换到下一个主版本(例如从 AMQ Broker 6 转换到 AMQ Broker 7)时,需要进行主要升级或迁移。本指南中未涉及此类升级。有关如何从之前版本的 AMQ Broker 进行升级的步骤,请参阅 迁移到 Red Hat AMQ 7
次发行版本
AMQ Broker 定期提供次要版本,这些版本是包含新功能的更新,以及漏洞和安全修复。如果您计划从一个 AMQ Broker 次要版本升级到另一个版本,例如从 AMQ Broker 7.0 升级到 AMQ Broker 7.1,则不使用私有、不受支持或技术预览组件的应用程序不需要代码更改。
微发行版本
AMQ Broker 还会定期提供包含小增强和修复的微发行版本。微发行版本将次要版本递增到最后一个数字,例如从 7.0.1 增加到 7.02。微版本不应要求代码更改,但某些版本可能需要配置更改。

2.2. 升级旧的 7.x 版本

2.2.1. 将代理实例从 7.0x 升级到 7.0y。

将 AMQ Broker 从 7.0 的一个版本升级到另一个版本的过程与用于安装的过程类似:从客户门户网站下载存档,然后提取它。

以下小节描述了如何为不同的操作系统升级 7.0.x 代理。

2.2.1.1. 在 Linux 上从 7.0.x 升级到 7.0y

下载的存档名称可能与以下示例中使用的不同。

先决条件

  • 在升级 AMQ Broker 前,请查看目标发行版本的发行注记。

    发行注记描述了重要增强、已知问题以及目标版本中行为的变化。

    如需更多信息,请参阅 AMQ Broker 7.0 发行注记

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。

    sudo chown amq-broker:amq-broker jboss-amq-7.x.x.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。在以下示例中,使用 /opt/redhat 目录。

    sudo mv jboss-amq-7.x.x.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。存档以压缩格式保存。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip jboss-amq-7.x.x.redhat-1.zip
  5. 如果代理正在运行,则停止代理。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>/log/artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.0.0.amq-700005-redhat-1 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录。

    ARTEMIS_HOME='/opt/redhat/jboss-amq-7.x.x-redhat-1'
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>/log/artemis.log,找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.1.0.amq-700005-redhat-1 [0.0.0.0, nodeID=4782d50d-47a2-11e7-a160-9801a793ea45]

2.2.1.2. 在 Windows 上从 7.0.x 升级到 7.0.y

先决条件

  • 在升级 AMQ Broker 前,请查看目标发行版本的发行注记。

    发行注记描述了重要增强、已知问题以及目标版本中行为的变化。

    如需更多信息,请参阅 AMQ Broker 7.0 发行注记

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请输入以下命令停止代理。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>\log\artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.0.0.amq-700005-redhat-1 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  9. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>\log\artemis.log 并找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.1.0.amq-700005-redhat-1 [0.0.0.0, nodeID=4782d50d-47a2-11e7-a160-9801a793ea45]

2.2.2. 将代理实例从 7.0.x 升级到 7.1.0

AMQ Broker 7.1.0 包含之前版本中未包含的配置文件和设置。将代理实例从 7.0.x 升级到 7.1.0 需要将这些新文件和设置添加到现有的 7.0.x 代理实例。以下小节描述了如何将不同操作系统的 7.0.x 代理实例升级到 7.1.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.2.2.1. 在 Linux 上从 7.0.x 升级到 7.1.0

在升级 7.0.x 代理前,您需要安装 Red Hat AMQ Broker 7.1.0 并创建一个临时代理实例。这将生成升级 7.0.x 代理所需的 7.1.0 配置文件。

先决条件

  • 在升级 AMQ Broker 前,请查看目标发行版本的发行注记。

    发行注记描述了重要增强、已知问题以及目标版本中行为的变化。

    如需更多信息,请参阅 AMQ Broker 7.1 发行注记

  • 在升级 7.0.x 代理前,您必须首先安装 7.1 版本。

    有关在 Linux 上安装 7.1 的步骤,请参阅安装 AMQ Broker

流程

  1. 如果正在运行,请停止您要升级的 7.0.x 代理:

    $ <broker_instance_dir>/bin/artemis stop
  2. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  3. 在 7.0 .x 代理的 <broker_instance_dir>/etc/ 目录中打开文件 artemis.profile

    1. 更新 ARTEMIS_HOME 属性,使其值指的是 AMQ Broker 7.1.0 的安装目录:

      ARTEMIS_HOME="<7.1.0_install_dir>"
    2. 在您更新的行中,添加属性 ARTEMIS_INSTANCE_URI,并为它分配引用 7.0.x 代理实例目录的值:

      ARTEMIS_INSTANCE_URI="file://<7.0.x_broker_instance_dir>"
    3. 通过添加 jolokia.policyLocation 参数并为其分配以下值来更新 JAVA_ARGS 属性:

      -Djolokia.policyLocation=${ARTEMIS_INSTANCE_URI}/etc/jolokia-access.xml
  4. 创建 7.1.0 代理实例。创建流程生成从 7.0.x 升级到 7.1.0 所需的配置文件。在以下示例中,请注意实例是在目录 upgrade_tmp 中创建的:

    $ <7.1.0_install_dir>/bin/artemis create --allow-anonymous --user admin --password admin upgrade_tmp
  5. 将临时 7.1.0 实例的 etc 目录中的配置文件复制到 7.0.x 代理的 <broker_instance_dir>/etc/ 目录中。

    1. 复制 management.xml 文件:

      $ cp <temporary_7.1.0_broker_instance_dir>/etc/management.xml <7.0_broker_instance_dir>/etc/
    2. 复制 jolokia-access.xml 文件:

      $ cp <temporary_7.1.0_broker_instance_dir>/etc/jolokia-access.xml <7.0_broker_instance_dir>/etc/
  6. 在 7.0 .x 代理的 <broker_instance_dir>/etc/ 目录中打开 bootstrap.xml 文件。

    1. 注释或删除以下两行:

      <app url="jolokia" war="jolokia.war"/>
      <app url="hawtio" war="hawtio-no-slf4j.war"/>
    2. 添加以下两个行来替换上一步中删除的两行:

      <app url="console" war="console.war"/>
  7. 启动您升级的代理:

    $ <broker_instance_dir>/bin/artemis run

其它资源

有关创建代理实例的更多信息,请参阅 创建代理实例

2.2.2.2. 在 Windows 上从 7.0.x 升级到 7.1.0

在升级 7.0.x 代理前,您需要安装 Red Hat AMQ Broker 7.1.0 并创建一个临时代理实例。这将生成升级 7.0.x 代理所需的 7.1.0 配置文件。

先决条件

  • 在升级 AMQ Broker 前,请查看目标发行版本的发行注记。

    发行注记描述了重要增强、已知问题以及目标版本中行为的变化。

    如需更多信息,请参阅 AMQ Broker 7.1 发行注记

  • 在升级 7.0.x 代理前,您必须首先安装 7.1 版本。

    有关在 Windows 上安装 7.1 的步骤,请参阅安装 AMQ Broker

流程

  1. 如果正在运行,请停止您要升级的 7.0.x 代理:

    > <broker_instance_dir>\bin\artemis-service.exe stop
  2. 使用文件管理器备份代理的实例目录。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  3. 在 7.0 .x 代理的 <broker_instance_dir>/etc/ 目录中打开文件 artemis.profile

    1. 更新 ARTEMIS_HOME 属性,使其值指的是 AMQ Broker 7.1.0 的安装目录:

      ARTEMIS_HOME="<7.1.0_install_dir>"
    2. 在您更新的行中,添加属性 ARTEMIS_INSTANCE_URI,并为它分配引用 7.0.x 代理实例目录的值:

      ARTEMIS_INSTANCE_URI="file://<7.0.x_broker_instance_dir>"
    3. 通过添加 jolokia.policyLocation 参数并为其分配以下值来更新 JAVA_ARGS 属性:

      -Djolokia.policyLocation=${ARTEMIS_INSTANCE_URI}/etc/jolokia-access.xml
  4. 创建 7.1.0 代理实例。创建流程生成从 7.0.x 升级到 7.1.0 所需的配置文件。在以下示例中,请注意实例是在目录 upgrade_tmp 中创建的:

    > <7.1.0_install_dir>/bin/artemis create --allow-anonymous --user admin --password admin upgrade_tmp
  5. 将临时 7.1.0 实例的 etc 目录中的配置文件复制到 7.0.x 代理的 <broker_instance_dir>/etc/ 目录中。

    1. 复制 management.xml 文件:

      > cp <temporary_7.1.0_broker_instance_dir>/etc/management.xml <7.0_broker_instance_dir>/etc/
    2. 复制 jolokia-access.xml 文件:

      > cp <temporary_7.1.0_broker_instance_dir>/etc/jolokia-access.xml <7.0_broker_instance_dir>/etc/
  6. 在 7.0 .x 代理的 <broker_instance_dir>/etc/ 目录中打开 bootstrap.xml 文件。

    1. 注释或删除以下两行:

      <app url="jolokia" war="jolokia.war"/>
      <app url="hawtio" war="hawtio-no-slf4j.war"/>
    2. 添加以下两个行来替换上一步中删除的两行:

      <app url="console" war="console.war"/>
  7. 启动您升级的代理:

    > <broker_instance_dir>\bin\artemis-service.exe start

其它资源

有关创建代理实例的更多信息,请参阅 创建代理实例

2.2.3. 将代理实例从 7.1.x 升级到 7.2.0

AMQ Broker 7.2.0 包括 7.0.x 版本不包含的配置文件和设置。如果您正在运行 7.0.x 实例,则必须首先将这些代理实例从 7.0.x 升级到 7.1.0,然后才能升级到 7.2.0。以下小节描述了如何将不同操作系统的 7.1.x 代理实例升级到 7.2.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.2.3.1. 在 Linux 上从 7.1.x 升级到 7.2.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。

    sudo chown amq-broker:amq-broker amq-7.x.x.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。在以下示例中,使用 /opt/redhat 目录。

    sudo mv amq-7.x.x.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip jboss-amq-7.x.x.redhat-1.zip
  5. 如果代理正在运行,则停止代理。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>/log/artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.5.0.amq-720001-redhat-1 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录。

    ARTEMIS_HOME='/opt/redhat/amq-7.x.x-redhat-1'
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>/log/artemis.log,找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.5.0.amq-720001-redhat-1 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.2.3.2. 在 Windows 上从 7.1.x 升级到 7.2.0

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请输入以下命令停止代理。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>\log\artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.0.0.amq-700005-redhat-1 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录中。

    ARTEMIS_HOME=<install_dir>
  8. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  9. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>\log\artemis.log 并找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.5.0.amq-720001-redhat-1 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.2.4. 将代理实例从 7.2.x 升级到 7.3.0

以下小节描述了如何将不同操作系统的 7.2.x 代理实例升级到 7.3.0。

2.2.4.1. 因为已弃用的分配控制台解决异常

从 7.3.0 版本开始,AMQ Broker 不再附带 Hawtio 分配控制台插件 assign -hawtio-console.war。在以前的版本中,分配控制台用于管理 AMQ Interconnect。但是,AMQ Interconnect 现在使用自己的独立 Web 控制台。这个更改会影响后续部分中的升级过程。

如果您在将代理实例升级到 7.3.0 前没有进一步操作,升级过程会生成类似如下的异常:

2019-04-11 18:00:41,334 WARN  [org.eclipse.jetty.webapp.WebAppContext] Failed startup of context o.e.j.w.WebAppContext@1ef3efa8{/dispatch-hawtio-console,null,null}{/opt/amqbroker/amq-broker-7.3.0/web/dispatch-hawtio-console.war}: java.io.FileNotFoundException: /opt/amqbroker/amq-broker-7.3.0/web/dispatch-hawtio-console.war.

您可以安全地忽略前面的异常,而不影响升级是否成功。

但是,如果您不希望在升级过程中看到这个例外,您必须首先删除对现有代理实例的 bootstrap.xml 文件中的 Hawtio 分配控制台插件的引用。bootstrap.xml 文件位于代理实例的 {instance_directory}/etc/ 目录中。以下示例显示了 AMQ Broker 7.2.4 实例的 bootstrap.xml 文件的一些内容:

<broker xmlns="http://activemq.org/schema">
....
   <!-- The web server is only bound to localhost by default -->
   <web bind="http://localhost:8161" path="web">
       <app url="redhat-branding" war="redhat-branding.war"/>
       <app url="artemis-plugin" war="artemis-plugin.war"/>
       <app url="dispatch-hawtio-console" war="dispatch-hawtio-console.war"/>
       <app url="console" war="console.war"/>
   </web>
</broker>

要避免在将 AMQ Broker 升级到 7.3.0 时出现异常,请删除 <app url="dispatch-hawtio-console" war="dispatch-hawtio-console.war"/>,如上例中所示。然后,保存修改后的 bootstrap 文件并启动升级过程,如下部分所述。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.2.4.2. 在 Linux 上从 7.2.x 升级到 7.3.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。

    sudo chown amq-broker:amq-broker amq-7.x.x.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。在以下示例中,使用 /opt/redhat 目录。

    sudo mv amq-7.x.x.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip jboss-amq-7.x.x.redhat-1.zip
  5. 如果代理正在运行,则停止代理。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>/log/artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.6.3.amq-720001-redhat-1 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录。

    ARTEMIS_HOME='/opt/redhat/amq-7.x.x-redhat-1'
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>/log/artemis.log,找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.2.4.3. 在 Windows 上从 7.2.x 升级到 7.3.0

流程

  1. 按照下载 AMQ Broker 归档中的说明,从红帽客户门户网站下载所需的存档
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请输入以下命令停止代理。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,日志文件末尾会显示类似以下的行,可在 <broker_instance_dir>\log\artemis.log 找到。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.6.3.amq-720001-redhat-1 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件,将 ARTEMIS_HOME 属性设置为提取存档时创建的新目录中。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件,以设置 JAVA_ARGS 环境变量来引用正确的日志管理器版本。

    JAVA_ARGS=<install_dir>\lib\jboss-logmanager-2.0.3.Final-redhat-1.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件,以设置 bootstrap 类路径 start 参数来引用正确的日志管理器版本。

    <startargument>Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.0.3.Final-redhat-1.jar</startargument>
  10. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开日志文件 <broker_instance_dir>\log\artemis.log 并找到与以下行类似的两行。请注意代理存活后日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.2.5. 将代理实例从 7.3.0 升级到 7.4.0

以下小节描述了如何将不同操作系统的 7.3.0 代理实例升级到 7.4.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.2.5.1. Linux 上的 7.3.0 升级到 7.4.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.x.x.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.x.x.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.x.x.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.x.x-redhat-1'
    2. 编辑 JAVA_ARGS 属性。添加 bootstrap 类 path 参数,该参数引用日志管理器的依赖文件。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.1.Final-redhat-00001.jar
  9. 编辑 <broker_instance_dir>/etc/bootstrap.xml 配置文件。在 <web> 配置元素中,添加对 AMQ Broker 的指标插件文件的引用。

    <app url="metrics" war="metrics.war"/>
  10. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.2.5.2. Windows 上的 7.3.0 升级到 7.4.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。设置 JAVA_ARGS 环境变量,以引用正确的日志管理器版本和依赖文件。

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.Final-redhat-00001.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。设置 bootstrap 类路径 start 参数来引用正确的日志管理器版本和依赖文件。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.Final-redhat-00001.jar</startargument>
  10. 编辑 <broker_instance_dir>\etc\bootstrap.xml 配置文件。在 <web> 配置元素中,添加对 AMQ Broker 的指标插件文件的引用。

    <app url="metrics" war="metrics.war"/>
  11. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  12. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.3. 将代理实例从 7.4.0 升级到 7.4.x

重要

AMQ Broker 7.4 被指定为长期支持(LTS)版本。在至少 12 个月的微发行版本(7.4.1、7.4.2 等)中,AMQ Broker 7.4 将提供程序错误修正和安全公告。这意味着,您可以获取 AMQ Broker 的最新程序错误修复和安全公告,而无需升级到新的次版本。如需更多信息,请参阅 AMQ Broker 的长期支持

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

以下小节描述了如何将不同操作系统的 7.4.0 代理实例升级到 7.4.x。

2.3.1. 在 Linux 上从 7.4.0 升级到 7.4.x

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.4.x.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.4.x.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.4.x.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME='/opt/redhat/amq-broker-7.4.x-redhat-1'
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.3.2. 在 Windows 上从 7.4.0 升级到 7.4.x

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  9. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.4. 将代理实例从 7.4.x 升级到 7.5.0

以下小节描述了如何将不同操作系统的 7.4.x 代理实例升级到 7.5.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.4.1. 在 Linux 上从 7.4.x 升级到 7.5.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.5.0.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.5.0.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.5.0.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.5.0-redhat-1'
    2. 编辑 JAVA_ARGS 属性。添加 bootstrap 类 path 参数,该参数引用日志管理器的依赖文件。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final-redhat-00001.jar
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.4.2. 在 Windows 上从 7.4.x 升级到 7.5.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.7.0.redhat-00054 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。设置 JAVA_ARGS 环境变量,以引用正确的日志管理器版本和依赖文件。

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00001.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。设置 bootstrap 类路径 start 参数来引用正确的日志管理器版本和依赖文件。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00001.jar</startargument>
  10. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.5. 将代理实例从 7.5.0 升级到 7.6.0

以下小节描述了如何将不同操作系统的 7.5.0 代理实例升级到 7.6.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.5.1. 在 Linux 上从 7.5.0 升级到 7.6.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.6.0.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.6.0.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.6.0.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00054 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.6.0-redhat-1'
    2. 编辑 JAVA_ARGS 属性。添加 bootstrap 类 path 参数,该参数引用日志管理器的依赖文件。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  10. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.11.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.5.2. 在 Windows 上从 7.5.0 升级到 7.6.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.9.0.redhat-00054 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。设置 JAVA_ARGS 环境变量,以引用正确的日志管理器版本和依赖文件。

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。设置 bootstrap 类路径 start 参数来引用正确的日志管理器版本和依赖文件。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar</startargument>
  10. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.11.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.6. 将代理实例从 7.6.0 升级到 7.7.0

以下小节描述了如何将不同操作系统的 7.6.0 代理实例升级到 7.7.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.6.1. Linux 上的 7.6.0 升级到 7.7.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.7.0.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.7.0.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.7.0.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.11.0.redhat-00001 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。例如:

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.7.0-redhat-1'
    2. 查找 JAVA_ARGS 属性。确保 bootstrap 类 path 参数引用日志管理器的依赖文件所需的版本,如下所示。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>/etc/logging.properties 配置文件。

    1. 在要配置的其他日志记录器列表中,包括 AMQ Broker 7.7.0 中添加的 org.apache.activemq.audit.resource 资源日志记录器。

      loggers=org.eclipse.jetty,org.jboss.logging,org.apache.activemq.artemis.core.server,org.apache.activemq.artemis.utils,org.apache.activemq.artemis.journal,org.apache.activemq.artemis.jms.server,org.apache.activemq.artemis.integration.bootstrap,org.apache.activemq.audit.base,org.apache.activemq.audit.message,org.apache.activemq.audit.resource
    2. Console 处理程序配置 部分之前,添加资源日志记录器的默认配置。

      ..
      
      logger.org.apache.activemq.audit.resource.level=ERROR
      logger.org.apache.activemq.audit.resource.handlers=AUDIT_FILE
      logger.org.apache.activemq.audit.resource.useParentHandlers=false
      
      # Console handler configuration
      ..
  10. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Mesq.audit.resource.handlers=AUDIT_FILE
    logger.org.apache.activemq.audit.resource.useParentHandlers=false
    sage Broker version 2.13.0.redhat-00003 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.6.2. Windows 上的 7.6.0 升级到 7.7.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹并选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.11.0.redhat-00001 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。确保 JAVA_ARGS 环境变量引用日志管理器和依赖文件的正确版本,如下所示:

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。确保 bootstrap 类路径路径参数引用了日志管理器和依赖文件的正确版本,如下所示。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar</startargument>
  10. 编辑 <broker_instance_dir>\etc\logging.properties 配置文件。

    1. 在要配置的其他日志记录器列表中,包括 AMQ Broker 7.7.0 中添加的 org.apache.activemq.audit.resource 资源日志记录器。

      loggers=org.eclipse.jetty,org.jboss.logging,org.apache.activemq.artemis.core.server,org.apache.activemq.artemis.utils,org.apache.activemq.artemis.journal,org.apache.activemq.artemis.jms.server,org.apache.activemq.artemis.integration.bootstrap,org.apache.activemq.audit.base,org.apache.activemq.audit.message,org.apache.activemq.audit.resource
    2. Console 处理程序配置 部分之前,添加资源日志记录器的默认配置。

      ..
      
      logger.org.apache.activemq.audit.resource.level=ERROR
      logger.org.apache.activemq.audit.resource.handlers=AUDIT_FILE
      logger.org.apache.activemq.audit.resource.useParentHandlers=false
      
      # Console handler configuration
      ..
  11. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  12. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.13.0.redhat-00003 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.7. 将代理实例从 7.7.0 升级到 7.8.0

以下小节描述了如何将不同操作系统的 7.7.0 代理实例升级到 7.8.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

2.7.1. 在 Linux 上从 7.7.0 升级到 7.8.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.9.3.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.9.3.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.9.3.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.13.0.redhat-00003 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。例如:

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.9.3-redhat-1'
    2. 查找 JAVA_ARGS 属性。确保 bootstrap 类 path 参数引用日志管理器的依赖文件所需的版本,如下所示。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>/etc/bootstrap.xml 配置文件。在 web 元素中,更新 7.9 中 AMQ 管理控制台所需的 .war 文件的名称。

    <web bind="http://localhost:8161" path="web">
        ...
        <app url="console" war="hawtio.war"/>
        ...
    </web>
  10. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Mesq.audit.resource.handlers=AUDIT_FILE
    logger.org.apache.activemq.audit.resource.useParentHandlers=false
    sage Broker version 2.16.0.redhat-00007 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.7.2. 在 Windows 上从 7.7.0 升级到 7.8.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹 amd 选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.13.0.redhat-00003 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。确保 JAVA_ARGS 环境变量引用日志管理器和依赖文件的正确版本,如下所示:

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。确保 bootstrap 类路径路径参数引用了日志管理器和依赖文件的正确版本,如下所示。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar</startargument>
  10. 编辑 <broker_instance_dir>\etc\bootstrap.xml 配置文件。在 web 元素中,更新 7.9 中 AMQ 管理控制台所需的 .war 文件的名称。

    <web bind="http://localhost:8161" path="web">
        ...
        <app url="console" war="hawtio.war"/>
        ...
    </web>
  11. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  12. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.16.0.redhat-00007 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

2.8. 将代理实例从 7.8.0 升级到 7.9.0

以下小节描述了如何将不同操作系统的 7.8.0 代理实例升级到 7.9.0。

重要

从 AMQ Broker 7.1.0 开始,默认情况下,您只能从本地主机访问 AMQ 管理控制台。有关配置对控制台的远程访问权限的信息,请参阅配置本地和远程访问 AMQ 管理控制台

注意

代理使用的日志格式在版本 7.9.0 中更改。因此,在将代理升级到版本 7.9.0 后,您无法降级到以前的版本。

2.8.1. 在 Linux 上从 7.8.0 升级到 7.9.0

注意

下载的存档名称可能与以下示例中使用的不同。

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 将存档的所有者更改为拥有 AMQ Broker 安装的同一用户,以升级。以下示例显示了名为 amq-broker 的用户

    sudo chown amq-broker:amq-broker amq-broker-7.9.3.redhat-1.zip
  3. 将存档移动到初始安装 AMQ Broker 期间创建的目录中。以下示例使用 /opt/redhat

    sudo mv amq-broker-7.9.3.redhat-1.zip /opt/redhat
  4. 以目录所有者身份,提取压缩存档的内容。在以下示例中,用户 amq-broker 使用 unzip 命令提取存档。

    su - amq-broker
    cd /opt/redhat
    unzip amq-broker-7.9.3.redhat-1.zip
  5. 如果代理正在运行,请停止它。

    <broker_instance_dir>/bin/artemis stop
  6. 通过将代理的实例目录复制到当前用户的主目录来备份代理实例目录。

    cp -r <broker_instance_dir> ~/
  7. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>/log/artemis.log 文件的末尾看到与以下类似的行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.13.0.redhat-00003 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]
  8. 编辑 <broker_instance_dir>/etc/artemis.profile 配置文件。

    1. ARTEMIS_HOME 属性设置为存档提取时创建的新目录。例如:

      ARTEMIS_HOME='/opt/redhat/amq-broker-7.9.3-redhat-1'
    2. 查找 JAVA_ARGS 属性。确保 bootstrap 类 path 参数引用日志管理器的依赖文件所需的版本,如下所示。

      -Xbootclasspath/a:$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>/etc/bootstrap.xml 配置文件。在 web 元素中,更新 7.9 中 AMQ 管理控制台所需的 .war 文件的名称。

    <web bind="http://localhost:8161" path="web">
        ...
        <app url="console" war="hawtio.war"/>
        ...
    </web>
  10. 启动升级的代理。

    <broker_instance_dir>/bin/artemis run
  11. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>/log/artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Mes
    INFO [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    sage Broker version 2.18.0.redhat-00010 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>/etc/artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在 broker 实例的 目录中的 etc / 和 data/ 目录中。

2.8.2. 在 Windows 上从 7.8.0 升级到 7.9.0

流程

  1. 从红帽客户门户下载所需的存档.按照下载 AMQ Broker 归档中 的说明操作。
  2. 使用文件管理器将存档移至您在上次安装 AMQ Broker 时创建的文件夹。
  3. 提取存档的内容。右键单击 .zip 文件并选择" 提取所有"。
  4. 如果代理正在运行,请停止它。

    <broker_instance_dir>\bin\artemis-service.exe stop
  5. 使用文件管理器备份代理。

    1. 右键点击 <broker_instance_dir> 文件夹 amd 选择 Copy
    2. 在同一窗口中单击鼠标右键,然后选择" 粘贴 "。
  6. (可选)请注意代理的当前版本。代理停止后,您会在 <broker_instance_dir>\log\artemis.log 文件的末尾看到一行类似于下面这一行。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.13.0.redhat-00003 [4782d50d-47a2-11e7-a160-9801a793ea45] stopped, uptime 28 minutes
  7. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd<broker_instance_dir>\bin\artemis-service.xml 配置文件。将 ARTEMIS_HOME 属性设置为存档提取时创建的新目录。

    ARTEMIS_HOME=<install_dir>
  8. 编辑 <broker_instance_dir>\etc\artemis.profile.cmd 配置文件。确保 JAVA_ARGS 环境变量引用日志管理器和依赖文件的正确版本,如下所示:

    JAVA_ARGS=-Xbootclasspath/%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar
  9. 编辑 <broker_instance_dir>\bin\artemis-service.xml 配置文件。确保 bootstrap 类路径路径参数引用了日志管理器和依赖文件的正确版本,如下所示。

    <startargument>-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final-redhat-00001.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final-redhat-00002.jar</startargument>
  10. 编辑 <broker_instance_dir>\etc\bootstrap.xml 配置文件。在 web 元素中,更新 7.9 中 AMQ 管理控制台所需的 .war 文件的名称。

    <web bind="http://localhost:8161" path="web">
        ...
        <app url="console" war="hawtio.war"/>
        ...
    </web>
  11. 启动升级的代理。

    <broker_instance_dir>\bin\artemis-service.exe start
  12. (可选)确认代理正在运行,并且版本已更改。启动代理后,打开 <broker_instance_dir>\log\artemis.log 文件。找到与以下类似的两行:请注意,当代理活跃时日志中出现的新版本号。

    INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    ...
    INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.18.0.redhat-00010 [0.0.0.0, nodeID=554cce00-63d9-11e8-9808-54ee759954c4]

其它资源

  • 有关创建代理实例的更多信息,请参阅 创建代理实例
  • 现在,您可以将代理实例的配置文件和数据存储在任何自定义目录中,包括代理实例目录之外的位置。在 <broker_instance_dir>\etc\artemis.profile 文件中,通过在创建代理实例后指定自定义目录的位置来更新 ARTEMIS_INSTANCE_ETC_URI 属性。在以前的版本中,这些配置文件和数据只能存储在代理实例目录中的 \etc 和 \data 目录中。

第 3 章 使用命令行界面

命令行界面(CLI)允许通过使用交互式终端与消息代理交互。使用 CLI 管理代理操作、配置消息以及输入有用的命令。

命令行界面(CLI)允许通过使用交互式流程将用户和角色添加到文件中。

3.1. 启动代理实例

代理实例是一个目录,其中包含所有配置和运行时数据,如日志和数据文件。运行时数据与一个唯一的代理进程关联。

您可以使用 artemis 脚本、Linux 服务或 Windows 服务在前台启动代理。

3.1.1. 启动代理实例

创建代理实例后,您将使用 artemis run 命令启动它。

流程

  1. 切换到安装期间创建的用户帐户。

    $ su - amq-broker
  2. 使用 artemis run 命令启动代理实例。

    $ /var/opt/amq-broker/mybroker/bin/artemis run
    
              __  __  ____    ____            _
        /\   |  \/  |/ __ \  |  _ \          | |
       /  \  | \  / | |  | | | |_) |_ __ ___ | | _____ _ __
      / /\ \ | |\/| | |  | | |  _ <| '__/ _ \| |/ / _ \ '__|
     / ____ \| |  | | |__| | | |_) | | | (_) |   <  __/ |
    /_/    \_\_|  |_|\___\_\ |____/|_|  \___/|_|\_\___|_|
    
    Red Hat JBoss AMQ 7.2.1.GA
    
    10:53:43,959 INFO  [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server
    10:53:44,076 INFO  [org.apache.activemq.artemis.core.server] AMQ221000: live Message Broker is starting with configuration Broker Configuration (clustered=false,journalDirectory=./data/journal,bindingsDirectory=./data/bindings,largeMessagesDirectory=./data/large-messages,pagingDirectory=./data/paging)
    10:53:44,099 INFO  [org.apache.activemq.artemis.core.server] AMQ221012: Using AIO Journal
    ...

    代理使用以下信息启动并显示日志输出:

    • 事务日志和集群配置的位置。
    • 用于消息持久性的日志类型(本例中为 AIO)。
    • 可接受客户端连接的 URI。

      默认情况下,端口 616 可以接受来自任何支持的协议(CORE、MQTT、AMQP、STOMP、HORNETQ 和 OPENWIRE)的连接。每个协议也都有单独的端口。

    • Web 控制台位于 http://localhost:8161
    • Jolokia 服务(JMX over REST)位于 http://localhost:8161/jolokia

3.1.2. 启动代理作为 Linux 服务

如果在 Linux 上安装了代理,您可以将其作为服务运行。

流程

  1. /etc/systemd/system/ 目录中创建一个新的 amq-broker.service 文件。
  2. 将以下文本复制到 文件:

    根据代理实例创建过程中提供的信息,修改路径和用户字段。在以下示例中,用户 amq-broker 启动在 /var/opt/amq-broker/mybroker/ 目录下安装的代理服务。

    [Unit]
    Description=AMQ Broker
    After=syslog.target network.target
    
    [Service]
    ExecStart=/var/opt/amq-broker/mybroker/bin/artemis run
    Restart=on-failure
    User=amq-broker
    Group=amq-broker
    
    # A workaround for Java signal handling
    SuccessExitStatus=143
    
    [Install]
    WantedBy=multi-user.target
  3. 打开终端。
  4. 使用以下命令启用代理服务:

    sudo systemctl enable amq-broker
  5. 使用以下命令运行代理服务:

    sudo systemctl start amq-broker

3.1.3. 启动代理作为 Windows 服务

如果在 Windows 上安装了代理,您可以将其作为服务运行。

流程

  1. 打开命令提示输入命令
  2. 使用以下命令将代理作为服务安装:

    <broker_instance_dir>\bin\artemis-service.exe install
  3. 使用以下命令启动服务:

    <broker_instance_dir>\bin\artemis-service.exe start
  4. (可选)卸载服务:

    <broker_instance_dir>\bin\artemis-service.exe uninstall

3.2. 停止代理实例

手动停止 broker 实例,或将代理配置为正常关闭。

3.2.1. 停止 broker 实例

创建独立代理并生成和使用测试消息后,您可以停止代理实例。

此流程手动停止代理,代理强制关闭所有客户端连接。在生产环境中,您应该将代理配置为正常停止,以便正确关闭客户端连接。

流程

  • 使用 artemis stop 命令停止代理实例:

    $ /var/opt/amq-broker/mybroker/bin/artemis stop
    2018-12-03 14:37:30,630 INFO  [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.6.1.amq-720004-redhat-1 [b6c244ef-f1cb-11e8-a2d7-0800271b03bd] stopped, uptime 35 minutes
    Server stopped!

3.2.2. 正常停止代理实例

在输入 stop 命令后,手动关闭会强制断开所有客户端的连接。另外,也可通过 启用 secureful-shutdown 的配置元素将代理配置为安全 关闭。

将 secureful-shutdown-enabled 设置为 true 时,输入 stop 命令后,不允许新的客户端连接。但是,现有的连接被允许在关闭过程启动之前在客户端上关闭。Gureful -shutdown-enabled 的默认值为 false

使用 secure ful-shutdown-timeout 配置元素为客户端设置一个时长(毫秒),以便在连接强制与代理端关闭之前断开连接。在所有连接都关闭后,关闭进程都会启动。使用 secureful -shutdown-timeout 的一个优点是它可防止客户端连接延迟关闭。Gureful -shutdown-timeout 的默认值为 -1,这意味着代理会无限期等待客户端断开连接。

以下流程演示了如何配置使用超时的安全关闭。

流程

  1. 打开配置文件 <broker_instance_dir>\etc\broker.xml
  2. 添加 secure ful-shutdown-enabled 配置元素,并将值设为 true

    <configuration>
         <core>
              ...
              <graceful-shutdown-enabled>
                  true
              </graceful-shutdown-enabled>
              ...
         </core>
    </configuration>
  3. 添加 secure ful-shutdown-timeout 配置元素,并以毫秒为单位设置超时值。在以下示例中,客户端连接在发出 stop 命令后强制关闭 30 秒(30000 毫秒)。

    <configuration>
         <core>
              ...
              <graceful-shutdown-enabled>
                  true
              </graceful-shutdown-enabled>
              <graceful-shutdown-timeout>
                  30000
              </graceful-shutdown-timeout>
              ...
         </core>
    </configuration>

3.3. 通过截获数据包审核消息

截获进入或退出代理的数据包,以审核数据包或过滤消息。拦截器更改它们拦截的数据包。这使得拦截器功能强大,但也具有危险性。

开发拦截器以满足您的业务需求。拦截器是特定于协议的,必须实施相应的接口。

拦截器必须实施 intercept () 方法,这将返回布尔值。如果值为 true,则消息数据包将继续。如果为 false,则进程将被中止,不会调用其他拦截器,并且不会进一步处理消息数据包。

3.3.1. 创建拦截器

拦截器可以更改它们拦截的数据包。您可以创建自己的传入和传出拦截器。所有拦截器都是特定的协议,对于分别进入或退出服务器的任何数据包调用。这可让您创建拦截器来满足审计数据包等业务要求。

拦截器及其依赖项必须放在代理的 Java 类路径中。您可以使用 <broker_instance_dir>/lib 目录,因为它默认是类路径的一部分。

以下示例演示了如何创建一个拦截器来检查传递给它的每个数据包的大小。

注意

示例为每个协议实施一个特定的接口。

流程

  1. 实施适当的接口并覆盖其 intercept () 方法。

    1. 如果您使用 AMQP 协议,实施 org.apache.activemq.artemis.protocol.amqp.broker.AmqpInterceptor 接口。

      package com.example;
      
      import org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage;
      import org.apache.activemq.artemis.protocol.amqp.broker.AmqpInterceptor;
      import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
      
      public class MyInterceptor implements AmqpInterceptor
      {
        private final int ACCEPTABLE_SIZE = 1024;
      
        @Override
        public boolean intercept(final AMQPMessage message, RemotingConnection connection)
        {
          int size = message.getEncodeSize();
          if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This AMQPMessage has an acceptable size.");
            return true;
          }
          return false;
        }
      }
    2. 如果您使用的是核心协议,您的拦截器必须实现 org.apache.artemis.activemq.api.core.Interceptor 接口。

      package com.example;
      
      import org.apache.artemis.activemq.api.core.Interceptor;
      import org.apache.activemq.artemis.core.protocol.core.Packet;
      import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
      
      public class MyInterceptor implements Interceptor
      {
        private final int ACCEPTABLE_SIZE = 1024;
      
        @Override
        boolean intercept(Packet packet, RemotingConnection connection)
        throws ActiveMQException
        {
          int size = packet.getPacketSize();
          if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This Packet has an acceptable size.");
            return true;
          }
          return false;
        }
      }
    3. 如果您使用的是 MQTT 协议,请实施 org.apache.activemq.artemis.core.protocol.mqtt.MQTTInterceptor 接口。

      package com.example;
      
      import org.apache.activemq.artemis.core.protocol.mqtt.MQTTInterceptor;
      import io.netty.handler.codec.mqtt.MqttMessage;
      import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
      
      public class MyInterceptor implements Interceptor
      {
        private final int ACCEPTABLE_SIZE = 1024;
      
        @Override
        boolean intercept(MqttMessage mqttMessage, RemotingConnection connection)
        throws ActiveMQException
        {
          byte[] msg = (mqttMessage.toString()).getBytes();
          int size = msg.length;
          if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This MqttMessage has an acceptable size.");
            return true;
          }
          return false;
        }
      }
    4. 如果您使用 STOMP 协议,请实施 org.apache.activemq.artemis.core.protocol.stomp.StompFrameInterceptor 接口。

      package com.example;
      
      import org.apache.activemq.artemis.core.protocol.stomp.StompFrameInterceptor;
      import org.apache.activemq.artemis.core.protocol.stomp.StompFrame;
      import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
      
      public class MyInterceptor implements Interceptor
      {
        private final int ACCEPTABLE_SIZE = 1024;
      
        @Override
        boolean intercept(StompFrame stompFrame, RemotingConnection connection)
        throws ActiveMQException
        {
          int size = stompFrame.getEncodedSize();
          if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This StompFrame has an acceptable size.");
            return true;
          }
          return false;
        }
      }

3.3.2. 将代理配置为使用拦截器

先决条件

  • 创建拦截器类,并将其(及其依赖项)添加到代理的 Java 类路径中。由于 <broker_instance_dir> /lib 目录默认是类路径的一部分,因此可以使用 & lt;broker_instance_dir> /lib 目录。

流程

  1. Open <broker_instance_dir>/etc/broker.xml
  2. 通过在 <broker_instance_dir> /etc/broker.xml中添加配置,将代理配置为使用拦截器

    1. 如果拦截器旨在传入邮件,请将其 class -name 添加到远程交互器 列表中。

      <configuration>
        <core>
          ...
          <remoting-incoming-interceptors>
             <class-name>org.example.MyIncomingInterceptor</class-name>
          </remoting-incoming-interceptors>
          ...
        </core>
      </configuration>
    2. 如果拦截器用于传出消息,请将其 class-name 添加到 remoting-out-interceptors 列表中。

      <configuration>
        <core>
          ...
          <remoting-outgoing-interceptors>
             <class-name>org.example.MyOutgoingInterceptor</class-name>
          </remoting-outgoing-interceptors>
        </core>
      </configuration>

3.3.3. 客户端拦截器

客户端可以使用拦截器截获客户端发送至服务器或服务器到客户端的数据包。如果代理侧拦截器返回一个 值,则不会调用其他拦截器,客户端也不会进一步处理数据包。此过程以透明方式进行,除非 以阻止 方式发送传出数据包。在本例中,A ctiveMQException 被抛给调用者。ActiveMQException 抛出包含返回 值的拦截器的名称。

在服务器上,客户端拦截器类及其依赖项必须添加到客户端的 Java 类路径中,以便能正确实例化和调用。

3.4. 检查代理和队列的健康状况

AMQ Broker 包含一个命令行实用程序,可让您在代理拓扑中的代理和队列中执行各种健康检查。

以下示例演示了如何使用 实用程序运行健康检查。

流程

  1. 请参阅您可以在代理拓扑中为特定代理(即 节点)运行检查列表。

    $ <broker_instance_dir>/bin/artemis help check node

    您会看到输出,它们描述了您可以在 artemis check node 命令中使用的一组选项。

    NAME
            artemis check node - Check a node
    
    SYNOPSIS
            artemis check node [--backup] [--clientID <clientID>]
                    [--diskUsage <diskUsage>] [--fail-at-end] [--live]
                    [--memoryUsage <memoryUsage>] [--name <name>] [--password <password>]
                    [--peers <peers>] [--protocol <protocol>] [--silent]
                    [--timeout <timeout>] [--up] [--url <brokerURL>] [--user <user>]
                    [--verbose]
    
    OPTIONS
            --backup
                Check that the node has a backup
    
            --clientID <clientID>
                ClientID to be associated with connection
    
            --diskUsage <diskUsage>
                Disk usage percentage to check or -1 to use the max-disk-usage
    
            --fail-at-end
                If a particular module check fails, continue the rest of the checks
    
            --live
                Check that the node has a live
    
            --memoryUsage <memoryUsage>
                Memory usage percentage to check
    
            --name <name>
                Name of the target to check
    
            --password <password>
                Password used to connect
    
            --peers <peers>
                Number of peers to check
    
            --protocol <protocol>
                Protocol used. Valid values are amqp or core. Default=core.
    
            --silent
                It will disable all the inputs, and it would make a best guess for any required input
    
            --timeout <timeout>
                Time to wait for the check execution, in milliseconds
    
            --up
                Check that the node is started, it is executed by default if there are no other checks
    
            --url <brokerURL>
                URL towards the broker. (default: tcp://localhost:61616)
    
            --user <user>
                User used to connect
    
            --verbose
                Adds more information on the execution
  2. 例如,检查本地代理的磁盘使用量是否低于为代理配置的最大磁盘用量。

    $ <broker_instance_dir>/bin/artemis check node --url tcp://localhost:61616 --diskUsage -1
    
    Connection brokerURL = tcp://localhost:61616
    Running NodeCheck
    Checking that the disk usage is less then the max-disk-usage ... success
    Checks run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.065 sec - NodeCheck

    在前面的示例中,为 --diskUsage 选项指定一个 -1 值意味着实用程序会根据为代理配置 的最大 磁盘用量检查磁盘使用情况。代理的最大磁盘用量是使用 broker.xml 配置文件中的 max-disk-usage 参数配置的。为 max-disk-usage 指定的值代表代理允许消耗的可用物理磁盘空间百分比。

  3. 请参阅您可以针对代理拓扑中的特定队列运行的检查列表。

    $ <broker_instance_dir>/bin/artemis help check queue

    您会看到输出,它们描述了您可以在 artemis 检查队列 命令中使用的一组选项。

    NAME
            artemis check queue - Check a queue
    
    SYNOPSIS
            artemis check queue [--browse <browse>] [--clientID <clientID>]
                    [--consume <consume>] [--fail-at-end] [--name <name>]
                    [--password <password>] [--produce <produce>] [--protocol <protocol>]
                    [--silent] [--timeout <timeout>] [--up] [--url <brokerURL>]
                    [--user <user>] [--verbose]
    
    OPTIONS
            --browse <browse>
                Number of the messages to browse or -1 to check that the queue is
                browsable
    
            --clientID <clientID>
                ClientID to be associated with connection
    
            --consume <consume>
                Number of the messages to consume or -1 to check that the queue is consumable
    
            --fail-at-end
                If a particular module check fails, continue the rest of the checks
    
            --name <name>
                Name of the target to check
    
            --password <password>
                Password used to connect
    
            --produce <produce>
                Number of the messages to produce
    
            --protocol <protocol>
                Protocol used. Valid values are amqp or core. Default=core.
    
            --silent
                It will disable all the inputs, and it would make a best guess for any required input
    
            --timeout <timeout>
                Time to wait for the check execution, in milliseconds
    
            --up
                Check that the queue exists and is not paused, it is executed by default if there are no other checks
    
            --url <brokerURL>
                URL towards the broker. (default: tcp://localhost:61616)
    
            --user <user>
                User used to connect
    
            --verbose
                Adds more information on the execution
  4. 实用程序可使用单个命令执行多个选项。例如,要在本地代理的默认 helloworld 队列中检查 1000 信息的生产、浏览和消耗,请使用以下命令:

    $ <broker_instance_dir>/bin/artemis check queue --name helloworld --produce 1000 --browse 1000 --consume 1000
    
    Connection brokerURL = tcp://localhost:61616
    Running QueueCheck
    Checking that a producer can send 1000 messages to the queue helloworld ... success
    Checking that a consumer can browse 1000 messages from the queue helloworld ... success
    Checking that a consumer can consume 1000 messages from the queue helloworld ... success
    Checks run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.882 sec - QueueCheck

    在前面的示例中,观察在运行队列检查时您没有指定代理 URL。如果您没有明确指定 URL,实用程序将使用默认值 tcp://localhost:616。

3.5. 命令行工具

AMQ Broker 包含一组命令行界面(CLI)工具,因此您可以管理消息传递日志。下表列出了每个工具的名称及其对应的描述。

工具Description

地址

地址工具组(创建/删除/更新/show)( 示例/研讨会地址创建)。

浏览器

浏览实例上的消息。

consumer

使用实例上的消息.

data

打印有关日志记录的报告并压缩数据.

decode

从编码导入内部日志格式。

编码

显示编码为 String 的日志的内部格式。

exp

使用特殊独立 XML 格式导出消息数据。

help

显示帮助信息.

imp

使用 exp 提供的输出,将日志导入到正在运行的代理。

kill

终止使用 --allow-kill 启动的代理实例。

掩码

屏蔽密码并将其打印出来。

perf-journal

计算您应该用于当前数据文件夹的 journal-buffer 超时。

Queue

队列工具组(创建/删除/更新/stat)( 示例/图表队列创建)。

run

运行 broker 实例。

stop

停止 broker 实例。

user

基于文件的默认用户管理(添加/rm/list/reset)(例如 /artemis 用户列表

有关每个工具可用的命令的完整列表,请使用 help 参数,后跟工具的名称。例如,在下例中,CLI 输出列出了用户输入命令后可供 数据 工具使用的所有命令 。/artemis 帮助数据

$ ./artemis help data

NAME
        artemis data - data tools group
        (print|imp|exp|encode|decode|compact) (example ./artemis data print)

SYNOPSIS
        artemis data
        artemis data compact [--broker <brokerConfig>] [--verbose]
                [--paging <paging>] [--journal <journal>]
                [--large-messages <largeMessges>] [--bindings <binding>]
        artemis data decode [--broker <brokerConfig>] [--suffix <suffix>]
                [--verbose] [--paging <paging>] [--prefix <prefix>] [--file-size <size>]
                [--directory <directory>] --input <input> [--journal <journal>]
                [--large-messages <largeMessges>] [--bindings <binding>]
        artemis data encode [--directory <directory>] [--broker <brokerConfig>]
                [--suffix <suffix>] [--verbose] [--paging <paging>] [--prefix <prefix>]
                [--file-size <size>] [--journal <journal>]
                [--large-messages <largeMessges>] [--bindings <binding>]
        artemis data exp [--broker <brokerConfig>] [--verbose]
                [--paging <paging>] [--journal <journal>]
                [--large-messages <largeMessges>] [--bindings <binding>]
        artemis data imp [--host <host>] [--verbose] [--port <port>]
                [--password <password>] [--transaction] --input <input> [--user <user>]
        artemis data print [--broker <brokerConfig>] [--verbose]
                [--paging <paging>] [--journal <journal>]
                [--large-messages <largeMessges>] [--bindings <binding>]

COMMANDS
        With no arguments, Display help information

        print
            Print data records information (WARNING: don't use while a
            production server is running)

        ...

您可以使用 help 参数来了解有关如何执行每个命令的更多信息。例如,在用户输入 ./artemis 帮助 打印数据 后,CLI 会列出有关数据打印 命令的更多信息。

$ ./artemis help data print

NAME
        artemis data print - Print data records information (WARNING: don't use
        while a production server is running)

SYNOPSIS
        artemis data print [--bindings <binding>] [--journal <journal>]
                [--paging <paging>]

OPTIONS
        --bindings <binding>
            The folder used for bindings (default ../data/bindings)

        --journal <journal>
            The folder used for messages journal (default ../data/journal)

        --paging <paging>
            The folder used for paging (default ../data/paging)

第 4 章 使用 AMQ 管理控制台

AMQ 管理控制台是 AMQ Broker 安装中包含的 Web 控制台,可让您使用 Web 浏览器管理 AMQ Broker。

AMQ 管理控制台基于 hawtio

4.1. 概述

AMQ Broker 是一个功能齐全、面向消息的中间件代理。它提供了专门的队列行为、消息持久性和可管理性。它支持多种协议和客户端语言,让您有更多时间使用许多应用程序资产。

AMQ Broker 的主要功能允许您:

  • 监控您的 AMQ 代理和客户端

    • 查看拓扑
    • 查看网络健康状况
  • 使用以下方法管理 AMQ 代理:

    • AMQ 管理控制台
    • 命令行界面(CLI)
    • 管理 API

AMQ 管理控制台支持的 Web 浏览器是 Firefox 和 Chrome。如需有关支持的浏览器版本的更多信息,请参阅 AMQ 7 支持的配置

4.2. 配置 AMQ 管理控制台的本地和远程访问权限

本节中的步骤演示了如何配置对 AMQ 管理控制台的本地和远程访问。

远程访问控制台可以使用以下两种形式之一:

  • 在本地代理的控制台会话中,您可以使用 Connect 选项卡连接到另一个远程代理
  • 从远程主机,使用本地代理的外部可访问 IP 地址连接到本地代理的控制台

先决条件

  • 您必须至少升级到 AMQ Broker 7.1.0。作为此升级的一部分,代理实例中添加了一个名为 jolokia-access.xml 的访问管理配置文件。如需有关升级的更多信息,请参阅 将代理实例从 7.0.x 升级到 7.1.0

流程

  1. 打开 <broker_instance_dir>/etc/bootstrap.xml 文件。
  2. Web 元素内,观察 Web 端口默认仅绑定到 localhost

    <web bind="http://localhost:8161" path="web">
        <app url="redhat-branding" war="redhat-branding.war"/>
        <app url="artemis-plugin" war="artemis-plugin.war"/>
        <app url="dispatch-hawtio-console" war="dispatch-hawtio-console.war"/>
        <app url="console" war="console.war"/>
    </web>
  3. 要从远程主机启用到本地代理控制台的连接,请将 Web 端口绑定到可访问网络的接口。例如:

    <web bind="http://0.0.0.0:8161" path="web">

    在前面的示例中,通过指定 0.0.0.0,您可以将 Web 端口绑定到本地代理 上的所有 接口。

  4. 保存 bootstrap.xml 文件。
  5. 打开 <broker_instance_dir>/etc/jolokia-access.xml 文件。
  6. <cors> (即 跨组织资源共享)元素中,为您要允许访问控制台的每个 HTTP 原始请求标头添加一个 allow-origin 条目。例如:

    <cors>
       <allow-origin>*://localhost*</allow-origin>
       <allow-origin>*://192.168.0.49*</allow-origin>
       <allow-origin>*://192.168.0.51*</allow-origin>
       <!-- Check for the proper origin on the server side, too -->
       <strict-checking/>
    </cors>

    在以上配置中,您可以指定允许以下连接:

    • 从本地主机(即本地代理实例的主机机器)连接到控制台。

      • 第一个星号(*)通配符字符允许在连接请求中指定 httphttps 方案,具体取决于您是否为安全连接配置了控制台。
      • 第二个星号通配符允许将主机计算机上的任何端口用于连接。
    • 使用本地代理的外部可访问 IP 地址,从远程主机连接到本地代理的控制台。在这种情况下,本地代理的外部可访问 IP 地址是 192.168.0.49
    • 从另一个在远程代理(远程代理)打开的控制台会话中进行连接。在这种情况下,远程代理的 IP 地址为 192.168.0.51
  7. 保存 jolokia-access.xml 文件。
  8. 打开 <broker_instance_dir>/etc/artemis.profile 文件。
  9. 要在控制台中启用 Connect 选项卡,请将 Dhawtio.disableProxy 参数的值设置为 false

    -Dhawtio.disableProxy=false
    重要

    建议您 仅在 控制台暴露于安全网络时启用来自控制台的远程连接(即,将 Dhawtio.disableProxy 参数的值设置为 false)。

  10. 向 Java 系统参数的 JAVA_ARGS 列表中添加新参数 Dhawtio.proxyWhitelist。作为逗号分隔列表,为您要从本地代理连接到的任何远程代理指定 IP 地址(也就是说,在本地代理上运行的控制台会话中使用 Connect 标签页)。例如:

    -Dhawtio.proxyWhitelist=192.168.0.51

    根据上述配置,您可以使用本地代理上的控制台会话中的连接选项卡 连接到 另一个 IP 地址为 192.168.0.51 的远程代理。

  11. 保存 is tmis.profile 文件。

其它资源

4.3. 访问 AMQ 管理控制台

本节中的步骤演示了如何:

  • 从本地代理打开 AMQ 管理控制台
  • 从本地代理的控制台会话中连接到其他代理
  • 使用本地代理的外部可访问 IP 地址从远程主机打开本地代理的控制台实例

先决条件

流程

  1. 在 Web 浏览器中,导航到本地代理的控制台地址。

    控制台地址为 http://<host:port>/console/login。如果您使用默认地址,请导航到 http://localhost:8161/console/login。否则,请使用为 <broker_instance_dir>/etc/bootstrap.xml 配置文件中 web 元素的 bind 属性定义的主机和端口的值。

    图 4.1. 控制台登录页面

    AMQ 管理控制台登录页面
  2. 使用您在创建代理时创建的默认用户名和密码登录到 AMQ 管理控制台。
  3. 要从本地代理的控制台会话连接到另一个远程代理:

    1. 在左侧菜单中,单击 连接 选项卡。
    2. 在主窗格中,单击 Remote 选项卡上的 Add connection 按钮。
    3. Add Connection 对话框中指定以下详情:

      Name
      远程连接的名称,例如 my_other_broker
      方案
      用于远程连接的协议。为非安全连接选择 http,或者为安全连接选择 https
      主机
      远程代理的 IP 地址。您必须已为此远程代理配置了控制台访问权限。
      端口
      用于远程连接的本地代理上的端口。在 <broker_instance_dir>/etc/bootstrap.xml 配置文件中为 web 元素的 bind 属性定义的端口值。默认值为 8161
      路径
      用于控制台访问的路径。指定 console/jolokia
    4. 若要测试连接,可单击 Test Connection 按钮。

      如果连接测试成功,请单击 Add 按钮。如果连接测试失败,请检查并根据需要修改连接详情。再次测试连接。

    5. Remote 页面上,针对您添加的连接,点 Connect 按钮。

      为远程代理上的 console 实例打开一个新的 Web 浏览器标签页。

    6. Log In 对话框中,为远程代理输入用户名和密码。点 Log In

      远程代理的控制台实例会打开。

  4. 要从远程主机连接到本地代理的控制台,在 Web 浏览器中指定本地代理的 Jolokia 端点。此端点包括您在配置远程控制台访问时为本地代理指定的外部可访问 IP 地址。例如:

    http://192.168.0.49/console/jolokia

4.4. 配置 AMQ 管理控制台

配置用户访问并请求对代理上资源的访问权限。

4.4.1. 使用红帽单点登录保护 AMQ 管理控制台

先决条件

  • 红帽单点登录 7.4

流程

  1. 配置红帽单点登录:

    1. 导航到您要用于保护 AMQ 管理控制台的红帽单点登录中的域。红帽单点登录中的每个域都包含一个名为 Broker 的客户端。此客户端与 AMQ 无关。
    2. 在红帽单点登录中创建一个新客户端,如 artemis-console
    3. 进入客户端设置页面并设置:

      • 有效的重定向 URI 到 AMQ 管理控制台 URL,后跟 *,例如:

        https://broker.example.com:8161/console/*
      • Web 提取到与 Valid Redirect URI 相同的值。红帽单点登录允许您输入 +,表示允许的 CORS 来源包括 Valid Redirect URI 的值。
    4. 为客户端创建一个角色,如 guest
    5. 确保需要访问 AMQ 管理控制台的所有用户都被分配了上述角色,例如使用红帽单点登录组。
  2. 配置 AMQ Broker 实例:

    1. 在您的 <broker-instance-dir>/instances/broker0/etc/login.config 文件中添加以下内容,将 AMQ 管理控制台配置为使用红帽单点登录:

      console {
          org.keycloak.adapters.jaas.BearerTokenLoginModule required
              keycloak-config-file="${artemis.instance}/etc/keycloak-bearer-token.json"
              role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal
          ;
      };

      添加此配置可设置 JAAS 主体以及红帽单点登录对 bearer 令牌的要求。与 Red Hat Single Sign-On 的连接在 keycloak-bearer-token.json 文件中定义,如下一步中所述。

    2. 创建一个包含以下内容的文件 <broker-instance-dir>/etc/keycloak-bearer-token.json,以指定与用于 bearer 令牌交换的红帽单点登录连接:

      {
        "realm": "<realm-name>",
        "resource": "<client-name>",
        "auth-server-url": "<RHSSO-URL>/auth",
        "principal-attribute": "preferred_username",
        "use-resource-role-mappings": true,
        "ssl-required": "external",
        "confidential-port": 0
      }
      <realm-name>
      红帽单点登录中的域名称
      <client-name>
      Red Hat Single Sign-On 中的客户端名称
      <RHSSO-URL>
      Red Hat Single Sign-On 的 URL
    3. 创建一个包含以下内容的文件 <broker-instance-dir>/etc/keycloak-js-token.json,以指定 Red Hat Single Sign-On 身份验证端点:

      {
        "realm": "<realm-name>",
        "clientId": "<client-name>",
        "url": "<RHSSO-URL>/auth"
      }
    4. 通过编辑 <broker-instance-dir>/etc/bootstrap.xml 文件来配置安全设置。

      例如,要允许具有 amq 角色的用户 消耗信息并允许具有 客户机 角色发送信息的用户,请添加以下内容:

               <security-setting match="Info">
                  <permission roles="amq" type="createDurableQueue"/>
                  <permission roles="amq" type="deleteDurableQueue"/>
                  <permission roles="amq" type="createNonDurableQueue"/>
                  <permission roles="amq" type="deleteNonDurableQueue"/>
                  <permission roles="guest" type="send"/>
                  <permission roles="amq" type="consume"/>
               </security-setting>
  3. 运行 AMQ 代理实例并验证 AMQ 管理控制台配置。

4.4.2. 设置用户对 AMQ 管理控制台的访问权限

您可以使用代理登录凭证访问 AMQ 管理控制台。下表提供了有关添加其他代理用户以访问 AMQ 管理控制台的不同方法的信息:

身份验证方法Description

guest 身份验证

启用匿名访问。在此配置中,任何无凭据或错误凭据连接的用户将自动进行身份验证并分配特定的用户和角色。

如需更多信息, 请参阅配置 AMQ Broker 中的客户机访问

基本用户和密码身份验证

对于每个用户,您必须定义用户名和密码并分配安全角色。用户只能使用这些凭据登录 AMQ 管理控制台。

如需更多信息, 请参阅配置 AMQ Broker 的基本用户和密码身份验证

LDAP 身份验证

通过对照存储在中央 X.500 目录服务器中的用户数据检查凭据来验证和授权用户。

如需更多信息,请参阅配置 LDAP 以验证配置 AMQ Broker 中的客户端

4.4.3. 保护 AMQ 管理控制台的网络访问

要在控制台通过 WAN 或互联网访问时保护 AMQ 管理控制台,请使用 SSL 指定网络访问使用 https 而不是 http

先决条件

以下应位于 <broker_instance_dir>/etc/ 目录中:

  • Java 密钥存储
  • Java 信任存储(只在您需要客户端身份验证时才需要)

流程

  1. 打开 <broker_instance_dir>/etc/bootstrap.xml 文件。
  2. <web> 元素中,添加以下属性:

    <web bind="https://0.0.0.0:8161"
        path="web"
        keyStorePath="<path_to_keystore>"
        keyStorePassword="<password>"
        clientAuth="<true/false>"
        trustStorePath="<path_to_truststore>"
        trustStorePassword="<password>">
        ...
    </web>
    bind
    对于与控制台的安全连接,请将 URI 架构更改为 https
    keyStorePath

    密钥存储文件的路径。例如:

    keyStorePath="<broker_instance_dir>/etc/keystore.jks"
    keyStorePassword
    密钥存储密码.此密码可以加密。
    clientAuth
    指定是否需要客户端身份验证。默认值为 false
    trustStorePath
    信任存储文件的路径。只有在 clientAuth 设为 true 时,才需要定义此属性。
    trustStorePassword
    信任存储密码.此密码可以加密。

其它资源

4.5. 使用 AMQ 管理控制台管理代理

您可以使用 AMQ 管理控制台查看正在运行的代理的信息,并管理以下资源:

  • 传入网络连接(接收器)
  • 地址
  • 队列

4.5.1. 查看代理的详情

要了解如何配置代理,在左侧菜单中点 Artemis。在文件夹树中,默认选择本地代理。

在主窗格中,有以下标签页:

状态

显示有关代理当前状态的信息,如正常运行时间和集群信息。还要显示代理当前使用的地址内存量。图将此值显示为 global-max-size 配置参数 的比例。

图 4.2. 状态选项卡

*status* 标签页
连接
显示有关代理连接的信息,包括客户端、集群和网桥连接。
会话
显示有关代理上当前打开的所有会话的信息。
用户
显示有关当前在代理上打开的所有消费者的信息。
producer
显示代理上当前打开的有关生产者的信息。
地址
显示有关代理中地址的信息。这包括内部地址,如存储转发地址。
队列
显示有关代理上的队列的信息。这包括内部队列,如存储和转发队列。
属性
显示代理上配置的属性的详细信息。
操作
显示您可以从控制台在代理上执行的 JMX 操作。当您点击操作时,会打开一个对话框,允许您为操作指定参数值。
chart
显示代理上配置的属性的实时数据。您可以编辑 chart 以指定 chart 中包含的属性。
代理图
显示集群拓扑图。这包括集群中的所有代理,以及本地代理上的任何地址和队列。

4.5.2. 查看代理图

您可以查看拓扑中的所有 AMQ Broker 资源图,包括代理(活动和备份代理)、生产者和使用者、地址和队列。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在主窗格中,点击 Broker 图表 选项卡。

    控制台显示集群拓扑图。这包括集群中的所有代理,以及本地代理上的任何地址和队列,如图所示。

    图 4.3. 代理图表 选项卡

    *broker 图* 标签页
  3. 要更改图中显示的项目,请使用图顶部的复选框。单击 Refresh
  4. 要显示本地代理的属性或与之连接的地址或队列,请单击图中的相应节点。例如,下图显示了还包含本地代理属性的示意图:

    图 4.4. 代理图表 选项卡,包括属性

    *broker 图* 标签页

4.5.3. 查看接收器

您可以查看为代理配置的接收器的详情。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在 文件夹树中,单击 acceptors
  3. 要查看如何配置接收器的详细信息,请单击接收器。

    控制台显示 Attributes 选项卡上的对应属性,如图中所示。

    图 4.5. AMQP 接收器属性

    AMQP 接收器属性
  4. 若要查看属性的完整详情,可单击 属性。这时将打开另一个窗口,用于显示详细信息。

4.5.4. 管理地址和队列

地址代表消息传递端点。在配置中,为典型地址指定一个唯一的名称。

队列与地址关联.每个地址可以有多个队列。传入消息与地址匹配后,该消息将发送到一个或多个队列,具体取决于配置的路由类型。队列可以被配置为自动创建和删除队列。

4.5.4.1. 创建地址

典型的地址被赋予唯一名称、零个或多个队列,以及路由类型。

路由类型决定了如何将消息发送到与地址关联的队列。可以使用两种不同的路由类型来配置地址:

如果您希望您的消息路由到…

使用此路由类型…

以点对点的方式在匹配地址内的单一队列。

anycast

匹配地址中的每个队列,采用发布与订阅的方式。

多播

您可以创建和配置地址和队列,然后在它们不再使用时将其删除。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在文件夹树中,单击 address
  3. 在主窗格中,单击 创建地址 选项卡。

    此时将显示一个页面,供您创建一个地址,如图中所示。

    图 4.6. Create Address 页

    AMQ 管理控制台创建地址
  4. 完成以下步骤:

    地址名称
    地址的路由名称。
    路由类型

    选择以下选项之一:

    • 多播 :发送到地址的消息将以发布与订阅的方式分发给所有订阅者。
    • anycast :发送到此地址的消息将以点对点的方式分发到一个订阅者。
    • 两者 :允许您为每个地址定义多个路由类型。这通常会产生一个反模式,我们不推荐这样做。

      注意

      如果地址确实使用两种路由类型,并且客户端没有显示任何一个路由类型的首选,则代理默认为 anycast 路由 类型。个例外是客户端使用 MQTT 协议时。在这种情况下,默认路由类型是 多播

  5. 单击 Create Address

4.5.4.2. 将消息发送到地址

以下流程演示了如何使用控制台向地址发送消息。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在文件夹树中,选择一个地址。
  3. 在主窗格中的导航栏中,单击 MoreSend 消息

    将显示一个页面供您创建消息,如图中所示。

    图 4.7. 发送消息页面

    AMQ 管理控制台发送消息
  4. 如有必要,单击 添加标头按钮以 添加邮件标题信息。
  5. 输入邮件正文。
  6. Format 下拉菜单中选择消息正文格式的选项,然后单击 Format。邮件正文采用您选择的格式人类可读样式格式化。
  7. 单击 Send 消息

    邮件已发送。

  8. 若要发送其他消息,可更改您输入的任何信息,然后单击 Send 消息

4.5.4.3. 创建队列

队列提供生产者与消费者之间的通道。

先决条件

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在文件夹树中,选择您要将队列绑定到的地址。
  3. 在主窗格中,单击 创建队列 选项卡。

    此时将显示一个页面,供您创建队列,如图中所示。

    图 4.8. Create Queue 页面

    AMQ 管理控制台创建队列
  4. 完成以下步骤:

    队列名称
    队列的唯一名称。
    路由类型

    选择以下选项之一:

    • 多播 :发送到父地址的消息将分发到绑定到 地址的所有队列。
    • anycast :只有绑定到父地址的一个队列才会接收消息的副本。消息将在绑定到 地址的所有队列中均匀分布。
    Durable
    如果您选择此选项,队列及其消息将永久存在。
    filter
    连接到代理时使用的用户名。
    最大消耗
    在给定时间可以访问队列的最大消费者数量.
    在没有消费者时清除
    如果选中,当没有消费者连接时,队列将被清除。
  5. 单击 Create Queue

4.5.4.4. 检查队列的状态

chart 提供代理队列状态的实时视图。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在 文件夹树中,导航到队列。
  3. 在主窗格中,单击 Chart 选项卡。

    控制台会显示显示所有队列属性的实时数据的图表。

    图 4.9. 队列的 chart 选项卡

    队列的 chart 选项卡
    注意

    要查看某个地址上多个队列的图表,请选择包含队列 的 anycast 或多 文件夹。

  4. 如有必要,为图表选择不同的条件:

    1. 在主窗格中,单击 Edit
    2. Attributes 列表中,选择您要包含在 chart 中的一个或多个属性。若要选择多个属性,请按住 Ctrl 键,再选择各个属性。
    3. 单击 View Chart 按钮。chart 会根据您选择的属性进行更新。

4.5.4.5. 浏览队列

浏览队列将显示队列中的所有消息。您还可以过滤和排序列表以查找特定消息。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在 文件夹树中,导航到队列。

    队列位于它们绑定到的地址内。

  3. 在主窗格的导航栏中,单击 MoreBrowse queue

    系统将显示队列中的消息。默认情况下会显示前 200 条消息。

    图 4.10. 浏览队列页面

    浏览队列页面
  4. 要浏览特定消息或一组信息,请执行以下操作之一:

    to…​do this…​

    过滤消息列表

    Filter…​ 中 文本字段,输入过滤器条件。单击搜索(即放大镜)图标。

    对消息列表排序

    在消息列表中,单击列标题。若要按降序排列消息,可再次单击标题。

  5. 若要查看消息的内容,可单击 Show 按钮。

    您可以查看邮件标题、属性和正文。

4.5.4.6. 向队列发送消息

创建队列后,您可以向其发送消息。以下过程概述了向现有队列发送消息所需的步骤。

流程

  1. 在左侧菜单中,单击 Artemis
  2. 在 文件夹树中,导航到队列。
  3. 在主窗格中,单击 发送消息 选项卡。

    这时将显示一个页面,供您编写邮件。

    图 4.11. 为队列发送消息页

    将消息发送到队列
  4. 如有必要,单击 添加标头按钮以 添加邮件标题信息。
  5. 输入邮件正文。
  6. Format 下拉菜单中选择消息正文格式的选项,然后单击 Format。邮件正文采用您选择的格式人类可读样式格式化。
  7. 单击 Send 消息。邮件已发送。
  8. 若要发送其他消息,可更改您输入的任何信息,然后单击 Send 消息

4.5.4.7. 将消息重新发送至队列

您可以重新发送之前发送的消息。

流程

  1. 浏览到您要重新发送的消息
  2. 单击您要重新发送的消息旁边的复选框。
  3. 单击 Resend 按钮。此时会显示消息。
  4. 根据 需要更新邮件标题和正文,然后单击 Send 消息

4.5.4.8. 将消息移动到不同的队列

您可以将一个队列中的一个或多个消息移动到不同的队列中。

流程

  1. 浏览您想要移动的消息
  2. 单击您要移动的每个消息旁边的复选框。
  3. 在导航栏中,单击 Move Messages

    此时会出现确认对话框。

  4. 从下拉菜单中选择您要将邮件移动到的队列名称。点 Move

4.5.4.9. 删除消息或队列

您可以删除队列或清除队列中的所有消息。

流程

  1. 浏览到您要删除或清除的队列
  2. 执行以下操作之一:

    to…​do this…​

    从队列中删除消息

    1. 单击您要删除的每个消息旁边的复选框。
    2. 点击 Delete 按钮。

    清除队列中的所有消息

    1. 在主窗格中的导航栏中,单击 Delete queue
    2. 单击 清除队列 按钮。

    删除队列

    1. 在主窗格中的导航栏中,单击 Delete queue
    2. 单击 Delete Queue 按钮。

第 5 章 监控代理运行时指标

安装 AMQ Broker 时,安装中包含 Prometheus 指标插件。Prometheus 是专为监控大型可扩展系统并在较长时间内存储历史运行时数据而构建的软件。您必须修改代理配置以启用插件。启用后,插件会收集代理的运行时指标,并将其导出到 Prometheus 格式。然后,您可以使用 Prometheus 查看指标数据。您还可以使用 Grafana 等图形工具来配置更高级的数据视觉化。

注意

Prometheus metrics 插件允许您以 Prometheus 格式 收集和导出代理指标。但是,红帽 不支持 安装或配置 Prometheus 本身,也不支持 Grafana 等视觉化工具。如果您需要安装、配置或运行 Prometheus 或 Grafana 的支持,请访问产品网站以获取社区支持和文档等资源。

除了 Prometheus 插件收集的代理指标外,您还可以修改代理配置,以捕获与代理的主机 Java 虚拟机(JVM)相关的标准指标集。特别是,您可以捕获 Garbage Collection(GC)、内存和线程的 JVM 指标。

以下部分描述:

5.1. 指标概述

要监控代理实例的健康状况和性能,您可以使用 AMQ Broker 的 Prometheus 插件来监控和存储代理运行时指标。AMQ Broker Prometheus 插件将代理运行时指标导出到 Prometheus 格式,允许您使用 Prometheus 本身来视觉化并运行数据查询。

您还可以使用图形工具(如 Grafana)为 Prometheus 插件收集的指标配置更高级的视觉化和仪表板。

插件导出到 Prometheus 格式的指标如下所述。

代理指标

artemis_address_memory_usage
此代理上所有地址用于内存中消息的字节数。
artemis_address_memory_usage_percentage
此代理上所有地址使用的内存作为 global-max-size 参数的百分比。
artemis_connection_count
连接到此代理的客户端数。
artemis_total_connection_count
自这个代理启动以来已连接到此代理的客户端数。

地址指标

artemis_routed_message_count
路由到一个或多个队列绑定的消息数量。
artemis_unrouted_message_count
路由到任何队列绑定的消息数。

队列指标

artemis_consumer_count
来自给定队列使用消息的客户端数量.
artemis_delivering_durable_message_count
给定队列当前传送给消费者的持久消息数量。
artemis_delivering_durable_persistent_size
给定队列正在提供给消费者的持久消息的持久大小。
artemis_delivering_message_count
给定队列当前传送给消费者的消息数量。
artemis_delivering_persistent_size
给定队列当前传送给消费者的持久信息大小。
artemis_durable_message_count
当前在给定队列中持久消息的数量。这包括调度、分页和内交付消息。
artemis_durable_persistent_size
目前在给定队列中持久化消息的持久大小.这包括调度、分页和内交付消息。
artemis_messages_acknowledged
创建队列后从给定队列确认的消息数。
artemis_messages_added
自创建队列以来添加到给定队列的消息数。
artemis_message_count
当前在给定队列中的消息数.这包括调度、分页和内交付消息。
artemis_messages_killed
创建队列后从给定队列中删除的消息数。当消息超过配置的最大发送尝试数时,代理会终止消息。
artemis_messages_expired
自创建队列以来,来自给定队列的消息数量已过期。
artemis_persistent_size
给定队列中所有消息(持久和非持久)的持久大小。这包括调度、分页和内交付消息。
artemis_scheduled_durable_message_count
给定队列中持久、调度的消息数量。
artemis_scheduled_durable_persistent_size
给定队列中持久、调度消息的持久大小.
artemis_scheduled_message_count
给定队列中调度的消息数.
artemis_scheduled_persistent_size
给定队列中调度消息的持久大小.

对于上方未列出的更高级别代理指标,您可以通过聚合较低级别指标来计算这些指标。例如,若要计算总消息数,您可以聚合代理部署中的所有队列中的 artemis_message_count 指标。

对于 AMQ Broker 的内部部署,托管代理的 Java 虚拟机(JVM)的指标也会导出到 Prometheus 格式。这不适用于在 OpenShift Container Platform 上部署 AMQ Broker。

5.2. 为 AMQ Broker 启用 Prometheus 指标插件

安装 AMQ Broker 时,安装中包含 Prometheus 指标插件。虽然插件已配置为使用,但您需要在代理配置中启用插件。启用后,插件会收集代理的运行时指标,并将其导出到 Prometheus 格式。

以下流程演示了如何为 AMQ Broker 启用 Prometheus 插件。

流程

  1. 将 Prometheus metrics plugin .jar 文件从 AMQ Broker 7.9 提取的归档复制到代理实例的 lib 目录。

    $ cp amq-broker-7.9.0/lib/artemis-prometheus-metrics-plugin-1.0.0.CR1-redhat-00010.jar <broker_instance_dir>/lib
  2. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  3. 在代理配置中启用 Prometheus 插件。使用 < plugin> 子元素添加 <metrics > 元素,配置如下。

    <metrics>
        <plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin"/>
    </metrics>
  4. 保存 broker.xml 配置文件。指标插件开始以 Prometheus 格式收集代理运行时指标。

5.3. 配置代理以收集 JVM 指标

以下流程演示了如何配置代理以收集 Garbage Collection(GC)、内存和线程的 Java 虚拟机(JVM)指标。

先决条件

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. 在启用 Prometheus metrics 插件时添加到配置的 <metrics> 元素 中,指定代理是否收集 Garbage Collection(GC)、内存和线程的 JVM 指标。例如:

    <metrics>
        <jvm-gc>true</jvm-gc>
        <jvm-memory>true</jvm-memory
        <jvm-threads>true</jvm-threads>
        <plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin"/>
    </metrics>
    注意

    如果您没有在配置中明确添加 jvm-memory 参数并指定值,代理将使用默认值 true。这意味着代理默认导出 JVM 内存指标。jvm-gc 和 jvm -threads 参数的默认值为 false

  3. 保存 broker.xml 配置文件。代理将开始收集您启用的 JVM 指标。这些指标也会导出到 Prometheus 格式。

5.4. 为特定地址禁用指标集合

当您为 AMQ Broker 配置指标插件(例如,Prometheus metrics 插件)时,指标集合会被默认启用。但是,在特定地址或地址 集的 address-setting 配置元素内,您可以明确禁用指标集合。

以下流程演示了如何为特定地址或 一组 地址禁用指标集合。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. 在匹配的地址或地址 集合address-setting 元素中,添加 enable-metrics 参数,并将 参数的值设为 false。例如,以下配置禁用名为 order 的地址的指标集合

    <configuration>
      <core>
        ...
        <address-settings>
           <address-setting match="orders">
              ...
              <enable-metrics>false</enable-metrics>
              ...
           </address-setting>
        </address-settings>
        ...
      </core>
    </configuration>

5.5. 使用 Prometheus 访问代理运行时数据

先决条件

  • 要查询并视觉化 Prometheus 插件收集的代理运行时数据,您需要安装 Prometheus。如需更多信息,请参阅 Prometheus 文档中的安装 Prometheus。

流程

  1. 在 Prometheus 安装目录中,打开 prometheus.yml 配置文件。
  2. 在配置文件的 static_configs 部分中,将 target 元素 更改为 localhost:8161。这个位置是代理运行其 Web 服务器的位置。默认情况下,/metrics 附加到此主机名,形成到存储在代理 Web 服务器上的指标的完整路径。
  3. 要查看 Prometheus 插件收集的代理运行时指标,请在 Web 浏览器中打开 localhost:8161/metrics

    在生成的网页中,您可以根据您在代理上配置的队列和地址,查看插件收集的指标的当前值。如果您的 JVM 中有多个正在运行的代理实例,您会看到每个代理的指标。

  4. 在 Prometheus 安装目录中运行 Prometheus。

    $ ./prometheus

    当 Prometheus 启动时,shell 输出包括以下行:

    component=web, msg=”Start listening for connections” address=0.0.0.0:9090

    上一行表示 Prometheus 正在端口 9090 上侦听 HTTP 流量。

  5. 要访问 Prometheus Web 控制台,请在 Web 浏览器中打开 127.0.0.1:9090
  6. 在 Prometheus web 控制台中,您可以使用 Expression 字段在代理数据上创建查询。您创建的查询基于 Prometheus 查询语言 PromQL。可以在查询中插入的代理指标数据包括在 Insert metric 下拉列表中。

    一个简单的示例,假设您要随着时间的推移查询 DLQ 队列中的消息数。在本例中,从 metrics 下拉列表中选择 artemis_message_count。通过指定 DLQ 队列名称和地址来完成查询。此查询示例如下所示:

    artemis_message_count{address=“DLQ”, queue=“DLQ”}

    对于更高级的视觉化,您可以使用正则表达式来创建覆盖多个指标的复杂查询,例如:或者,您可以对多个指标执行数学运算,如聚合它们。有关创建 Prometheus 查询的更多信息,请参阅 Prometheus 文档中的查询 Prometheus。

第 6 章 使用管理 API

AMQ Broker 具有广泛的管理 API,可用于修改代理的配置、创建新资源(如地址和队列)、检查这些资源(例如,队列中保存的消息数量),并与它们交互(例如,从队列中删除消息)。

此外,客户端可以使用管理 API 管理代理并订阅管理通知。

6.1. 使用管理 API 管理 AMQ Broker 的方法

使用管理 API 管理代理的方法有两种:

  • 使用 JMX SAS- SASJMX 是管理 Java 应用程序的标准方法
  • 使用 JMS API SAS- SAS 管理操作时,会使用 JMS 消息和 AMQ JMS 客户端将代理发送到代理

虽然可以通过两种不同的方法来管理代理,但每个 API 支持相同的功能。如果使用 JMX 管理资源,也可以使用 JMS 消息和 AMQ JMS 客户端来获得相同的结果。

这种选择取决于您的特定要求、应用程序设置和环境。无论您调用管理操作的方式如何,管理 API 都是相同的。

对于每个受管资源,都有一个 Java 接口,描述可为此类型的资源调用的内容。代理在 org.apache.activemq.artemis.api.core.management 软件包中公开其受管资源。调用管理操作的方式取决于是否使用了 JMX 消息或 JMS 消息和 AMQ JMS 客户端。

注意

有些管理操作需要一个 过滤器 参数来选择受操作影响的消息。传递 null 或空字符串表示 将对所有消息 执行管理操作。

6.2. 使用 JMX 管理 AMQ 代理

您可以使用 Java 管理扩展(JMX)来管理代理。管理 API 由代理使用 MBeans 接口公开。代理将其资源注册到域 org.apache.activemq

例如,要管理名为 exampleQueue 的队列的 ObjectName 是:

org.apache.activemq.artemis:broker="__BROKER_NAME__",component=addresses,address="exampleQueue",subcomponent=queues,routingtype="anycast",queue="exampleQueue"

MBean 是:

org.apache.activemq.artemis.api.management.QueueControl

MBean 的 ObjectName 使用帮助程序类 org.apache.activemq.artemis.api.core.management.ObjectNameBuilder 构建。您还可以使用 jconsole 来查找要管理的 MBean 的 ObjectName

使用 JMX 管理代理与使用 JMX 管理任何 Java 应用程序相同。它可以通过反映性或创建 MBean 的代理来完成。

6.2.1. 配置 JMX 管理

默认情况下,启用 JMX 以管理代理。您可以通过在 broker.xml 配置文件中设置 jmx-management-enabled 属性来启用或禁用 JMX 管理。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. 设置 <jmx-management-enabled>

    <jmx-management-enabled>true</jmx-management-enabled>

    如果启用了 JMX,则代理可以使用 jconsole 在本地进行管理。

    注意

    出于安全原因,默认情况下不启用与 JMX 的远程连接。

  3. 如果您要从同一 MBeanServer 管理多个代理,请为每个代理配置 JMX 域。

    默认情况下,代理使用 JMX 域 org.apache.activemq.artemis

    <jmx-domain>my.org.apache.activemq</jmx-domain>
    注意

    如果您在 Windows 系统中使用 AMQ Broker,则必须在 artemis 或 artemis. cmd 中设置系统属性。shell 脚本位于 <install_dir>/bin 下。

其它资源

  • 有关为远程管理配置代理的更多信息,请参阅甲骨文的 Java 管理指南

6.2.2. 配置 JMX 管理访问

出于安全原因,默认禁用对代理的远程 JMX 访问。但是,AMQ 代理有一个 JMX 代理,允许远程访问 JMX MBeans。您可以通过在代理 management.xml 配置文件中配置连接器元素来启用 JMX 访问。

注意

虽然也可以使用 'com.sun.management.jmxremote ' JVM 系统属性启用 JMX 访问,但这种方法不受支持且不安全。修改 JVM 系统属性可以绕过代理上的 RBAC。为最大程度降低安全风险,请考虑对本地主机进行有限访问。

重要

公开代理的 JMX 代理以进行远程管理具有安全隐患。

保护您的配置,如以下流程所述:

  • 将 SSL 用于所有连接。
  • 明确定义连接器主机,即用于公开代理的主机和端口。
  • 显式定义 RMI(Remote Method Invocation)registry 绑定到的端口。

先决条件

  • 正常工作的代理实例
  • Java jconsole 工具

流程

  1. 打开 <broker-instance-dir>/etc/management.xml 配置文件。
  2. 为 JMX 代理定义连接器。connector-port 设置建立一个 RMI 注册表,供 JMX 连接器服务器的 jconsole 查询等客户端创建。例如,允许在端口 1099 上进行远程访问:

    <connector connector-port="1099"/>
  3. 使用 jconsole 验证与 JMX 代理的连接

    service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
  4. 定义连接器的其他属性,如下所述。

    connector-host
    要在其上公开代理的代理服务器主机。要防止远程访问,请将 connector -host 设置为 127.0.0.1 (本地主机)。
    rmi-registry-port
    JMX RMI 连接器服务器绑定到的端口。如果没有设置,端口始终是随机的。设置此属性以避免通过防火墙隧道远程 JMX 连接时出现问题。
    jmx-realm
    用于身份验证的 JMX 域.默认值是 activemq,以匹配 JAAS 配置。
    object-name
    要公开远程连接器的对象名称。默认值为 connector :name=rmi
    已保护
    指定连接器是否使用 SSL 保护。默认值为 false。将值设为 true 以确保通信安全。
    key-store-path
    密钥存储的位置.如果您设置了 secure ="true",则需要此项。
    key-store-password
    密钥存储密码.如果您设置了 secure ="true",则需要此项。密码可以加密。
    key-store-provider
    密钥存储提供程序.如果您设置了 secure ="true",则需要此项。默认值为 JKS
    trust-store-path
    信任存储的位置。如果您设置了 secure ="true",则需要此项。
    trust-store-password
    信任存储密码.如果您设置了 secure ="true",则需要此项。密码可以加密。
    trust-store-provider
    信任存储提供程序.如果您设置了 secure ="true",则需要此项。默认值为 JKS
    password-codec
    要使用的密码 codec 的完全限定类名称。更多相关信息,请参阅以下链接的密码屏蔽文档。
  5. 按照 Java 平台文档 中所述,使用 jdk.serialFilter 为端点序列化设置适当的值。

其它资源

  • 有关配置文件中加密密码的更多信息,请参阅配置文件 中的加密密码

6.2.3. MBeanServer 配置

当代理以独立模式运行时,它使用 Java 虚拟机的平台 MBeanServer 注册其 MBean。默认情况下,也部署 Jolokia 以允许使用 REST 访问 MBean 服务器。

6.2.4. JMX 如何通过 Jolokia 公开

默认情况下,AMQ Broker 附带作为 Web 应用程序部署的 Jolokia HTTP 代理。Jolokia 是一个通过 HTTP 网桥的远程 JMX,公开 MBeans。

注意

要使用 Jolokia,用户必须属于 <broker_instance_dir>/etc/artemis .profile 配置文件中 hawtio.role 系统属性定义的角色。默认情况下,此角色为 amq

例 6.1. 使用 Jolokia 查询代理版本

本例使用 Jolokia REST URL 来查找代理的版本。Origin 标志应为代理服务器指定域名或 DNS 主机名。另外,您为 Origin 指定的值必须与 Jolokia Cross-Origin 资源共享(CORS)规格中的 <allow-origin> 条目对应。

$ curl http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker=\"0.0.0.0\"/Version -H "Origin: mydomain.com"
{"request":{"mbean":"org.apache.activemq.artemis:broker=\"0.0.0.0\"","attribute":"Version","type":"read"},"value":"2.4.0.amq-710002-redhat-1","timestamp":1527105236,"status":200}

其它资源

6.2.5. 订阅 JMX 管理通知

如果在您的环境中启用了 JMX,您可以订阅管理通知。

流程

  • 订阅 ObjectName org.apache.activemq.artemis:broker="<broker-name>"

其它资源

6.3. 使用 JMS API 管理 AMQ Broker

Java 消息服务(JMS)API 允许您创建、发送、接收和读取消息。您可以使用 JMS 和 AMQ JMS 客户端来管理代理。

6.3.1. 使用 JMS 消息和 AMQ JMS 客户端配置代理管理

要使用 JMS 管理代理,您必须首先使用 manage 权限配置代理的管理地址。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. 添加 <management-address> 元素,并指定一个管理地址。

    默认情况下,管理地址为 queue.activemq.management。只有在不想使用默认值时,才需要指定不同的地址。

    <management-address>my.management.address</management-address>
  3. 为管理地址提供 manage 用户权限类型。

    此权限类型使管理地址能够接收和处理管理消息。

    <security-setting-match="queue.activemq.management">
        <permission-type="manage" roles="admin"/>
    </security-setting>

6.3.2. 使用 JMS API 和 AMQ JMS 客户端管理代理

若要利用 JMS 消息调用管理操作,AMQ JMS 客户端必须实例化特殊的管理队列。

流程

  1. 创建一个 QueueRequestor,以发送消息到管理地址并接收回复。
  2. 创建 消息.
  3. 使用 helper 类 org.apache.activemq.artemis.api.jms.management.JMSManagementHelper 填写消息及管理属性。
  4. 使用 QueueRequestor 发送消息。
  5. 使用 helper 类 org.apache.activemq.artemis.api.jms.management.JMSManagementHelper,从管理回复检索操作结果。

例 6.2. 查看队列中的消息数

本例演示了如何使用 JMS API 查看 JMS 队列 exampleQueue 中的消息数量:

Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management");

QueueSession session = ...
QueueRequestor requestor = new QueueRequestor(session, managementQueue);
connection.start();
Message message = session.createMessage();
JMSManagementHelper.putAttribute(message, "queue.exampleQueue", "messageCount");
Message reply = requestor.request(message);
int count = (Integer)JMSManagementHelper.getResult(reply);
System.out.println("There are " + count + " messages in exampleQueue");

6.4. 管理操作

无论您是使用 JMX 或 JMS 消息来管理 AMQ Broker,您都可以使用相同的 API 管理操作。使用管理 API,您可以管理代理、地址和队列。

6.4.1. 代理管理操作

您可以使用管理 API 管理代理。

列出、创建、部署和销毁队列

可以使用 getQueueNames() 方法检索已部署队列的列表。

可以使用管理操作 createQueue()、deployQueue()destroy Queue() ActiveMQServerControl 上创建或销毁队列(通过 ObjectName org.apache.activemq.artemis:broker="BROKER_NAME" 或资源 名称服务器)。

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

暂停和恢复队列
QueueControl 可以暂停并恢复底层队列。暂停队列后,它将接收消息,但不会发送邮件。恢复之后,它将开始发送已排队的消息(如果有)。
列出和关闭远程连接

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

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

管理事务

如果代理崩溃,代理重启时可能需要人工干预。使用以下方法帮助您解决遇到的问题:

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

使用 commitPreparedTransaction()或 rollbackPreparedTransaction() 提交或 回滚给定的已准备事务, 从而解决各种事务。

使用 listHeuristicCommit Transactions()和 listHeuristic RolledBackTransactions 方法列出启发性完成的事务。

启用和重置消息计数器

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

使用 reset AllMessageCounters()和 resetAllMessage CounterHistories()方法 重置消息计数器。

检索代理配置和属性
ActiveMQServerControl 通过它的所有属性(例如 getVersion()方法来检索代理的版本等) 公开代理的配置。
列出、创建和销毁核心网桥并转变

列出部署的 Core Bridge 并分别使用 getBridgeNames()getDivertNames() 方法转换。

使用 createBridge()和 destroy Bridge()或 create Divert ()或 destroy Divert()和 destroyDivert() 创建 或销毁 通过 ObjectName org.apache.activemq.artemis:broker="BROKER_NAME" 或资源 名称服务器)。

停止代理并强制使用任何当前连接的客户端进行故障转移

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>" 或资源名称 address.<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>" 或资源名称 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()方法 为队列列出消息计数器( 请参阅 第 6.6 节 “使用消息计数器”)。也可以使用 resetMessageCounter() 方法为单个队列重置消息计数器。
检索队列属性
QueueControl 通过其属性公开队列设置(例如 getFilter(),用于检索队列的过滤器(如果使用某个队列创建,则为 isDurable()) 以了解队列是否持久等。
暂停和恢复队列
QueueControl 可以暂停并恢复底层队列。暂停队列后,它将接收消息,但不会发送邮件。恢复之后,它将开始发送已排队的消息(如果有)。

6.4.4. 远程资源管理操作

您可以使用管理 API 启动和停止代理的远程资源(接收器、转换和网桥等),从而在特定时间段内使代理脱机,无需完全停止。

接收器
使用 start() 或启动或停止接收器。 AcceptorControl 类上的 stop() 方法(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=acceptors,name="<acceptor-name> "或资源名称 acceptor.<address-name>接收器参数可以使用 AcceptorControl 属性检索。请参阅 Network Connections:接收器和连接器 以了解 Acceptors 的更多信息。
转变
启动或停止 DivertControl 类上的 start() 或 stop() 方法(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=diverts, 名称="<divert-name>" 或资源名称 en oke.<divert-name>可以使用 DivertControl 属性检索参数。
网桥
使用 start()( resp. BridgeControl 类上的 stop())方法(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=bridge,name="<bridge-name> "或资源名称 bridge.<bridge-name>网桥参数可使用 BridgeControl 属性检索。
广播组
使用 BroadcastGroupControl 类上的 start()或 stop() 方法启动或停止广播组(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=broadcast-group, 名称="<broadcast-group-name>" 或资源名称 broadcastgroup.<broadcast-group-name>广播组参数可以使用 BroadcastGroupControl 属性来检索。如需更多信息 ,请参阅代理发现方法
发现组
使用 DiscoveryGroupControl 类上的 start()stop() 方法(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=discovery-group, Name="<discovery-group-name>" 或资源名称 discovery.<discovery-group-name>可以利用 DiscoveryGroupControl 属性检索发现组参数。如需更多信息 ,请参阅代理发现方法
集群连接
使用 ClusterConnectionControl 类上的 start()stop() 方法启动或停止集群连接(使用 ObjectName org.apache.activemq.artemis:broker="<broker-name>",component=cluster-connection, 名称="<cluster-connection-name>" 或资源名称 clusterconnection.<cluster-connection-name>集群连接参数可使用 ClusterConnectionControl 属性检索。如需更多信息,请参阅创建代理集群

6.5. 管理通知

以下是所有不同类型的通知的列表,以及邮件上的标头。每个通知都有一个 _AMQ_NotifType (值在括号中记录)和 _AMQ_NotifTimestamp 标头。时间戳是调用 java.lang.System.currentTimeMillis() 的未格式化结果。

通知类型标头

BINDING_ADDED (0)

_AMQ_Binding_Type

_AMQ_Address

_AMQ_ClusterName

_AMQ_RoutingName

_AMQ_Binding_ID

_AMQ_Distance

_AMQ_FilterString

BINDING_REMOVED (1)

_AMQ_Address

_AMQ_ClusterName

_AMQ_RoutingName

_AMQ_Binding_ID

_AMQ_Distance

_AMQ_FilterString

CONSUMER_CREATED (2)

_AMQ_Address

_AMQ_ClusterName

_AMQ_RoutingName

_AMQ_Distance

_AMQ_ConsumerCount

_AMQ_User

_AMQ_RemoteAddress

_AMQ_SessionName

_AMQ_FilterString

CONSUMER_CLOSED (3)

_AMQ_Address

_AMQ_ClusterName

_AMQ_RoutingName

_AMQ_Distance

_AMQ_ConsumerCount

_AMQ_User

_AMQ_RemoteAddress

_AMQ_SessionName

_AMQ_FilterString

SECURITY_AUTHENTICATION_VIOLATION (6)

_AMQ_User

SECURITY_PERMISSION_VIOLATION (7)

_AMQ_Address

_AMQ_CheckType

_AMQ_User

DISCOVERY_GROUP_STARTED (8)

name

DISCOVERY_GROUP_STOPPED (9)

name

BROADCAST_GROUP_STARTED (10)

name

BROADCAST_GROUP_STOPPED (11)

name

BRIDGE_STARTED (12)

name

BRIDGE_STOPPED (13)

name

CLUSTER_CONNECTION_STARTED (14)

name

CLUSTER_CONNECTION_STOPPED (15)

name

ACCEPTOR_STARTED (16)

工厂

id

ACCEPTOR_STOPPED (17)

工厂

id

提议 (18)

_JBM_ProposalGroupId

_JBM_ProposalValue

_AMQ_Binding_Type

_AMQ_Address

_AMQ_Distance

PROPOSAL_RESPONSE (19)

_JBM_ProposalGroupId

_JBM_ProposalValue

_JBM_ProposalAltValue

_AMQ_Binding_Type

_AMQ_Address

_AMQ_Distance

CONSUMER_SLOW (21)

_AMQ_Address

_AMQ_ConsumerCount

_AMQ_RemoteAddress

_AMQ_ConnectionName

_AMQ_ConsumerName

_AMQ_SessionName

6.6. 使用消息计数器

您可以使用消息计数器获取一段时间内的队列信息。这有助于您辨别出原本难以看到的趋势。

例如,您可以使用消息计数器来确定如何随着时间推移使用特定队列。您还可以尝试通过使用管理 API 以固定间隔查询队列中的消息数量来获取此信息,但这不会显示队列的实际使用情况。队列中的消息数量可以保持不变,因为任何客户端都不会在其上发送或接收消息,或者因为发送到队列的消息数量等同于它所使用的消息数。在这两种情况下,队列中的消息数量保持不变,即使它使用的方式完全不同。

6.6.1. 消息计数器类型

消息计数器提供有关代理上队列的额外信息。

数量
代理启动之后添加到队列的消息总数。
countDelta
自上次消息计数器更新以来添加到队列的消息数。
lastAckTimestamp
最后一次确认队列消息时的时间戳。
lastAddTimestamp
最后一次向队列添加消息时的时间戳。
messageCount
队列中的当前消息数。
messageCountDelta
自上次消息计数器更新以来从队列添加/删除的消息总数。例如,如果 messageCountDelta-10,则总共已从队列中删除 10 条消息。
udpateTimestamp
最后一条消息计数器更新的时间戳。
注意

您还可以组合消息计数器以确定其他有意义的数据。例如,若要具体知道自上次更新以来从队列中消耗多少条消息,您需要从 count Delta 减去消息Count Delta

6.6.2. 启用消息计数器

消息计数器对代理的内存有小的影响,因此默认禁用它们。要使用消息计数器,您必须首先启用它们。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. 启用消息计数器.

    <message-counter-enabled>true</message-counter-enabled>
  3. 设置消息计数器历史记录和抽样周期。

    <message-counter-max-day-history>7</message-counter-max-day-history>
    <message-counter-sample-period>60000</message-counter-sample-period>
    message-counter-max-day-history
    代理存储队列指标的天数。默认值为 10 天。
    message-counter-sample-period
    代理应抽样其队列以收集指标的频率(以毫秒为单位)。默认值为 10000 毫秒。

6.6.3. 检索消息计数器

您可以使用管理 API 来检索消息计数器。

先决条件

流程

  • 使用 management API 检索消息计数器。

    // Retrieve a connection to the broker's MBeanServer.
    MBeanServerConnection mbsc = ...
    JMSQueueControlMBean queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc,
       on,
       JMSQueueControl.class,
       false);
    
    // Message counters are retrieved as a JSON string.
    String counters = queueControl.listMessageCounter();
    
    // Use the MessageCounterInfo helper class to manipulate message counters more easily.
    MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);
    System.out.format("%s message(s) in the queue (since last sample: %s)\n",
    messageCounter.getMessageCount(),
    messageCounter.getMessageCountDelta());

其它资源

第 7 章 监控代理以了解问题

AMQ Broker 包括一个名为 Critical 分析器 的内部工具,用于主动监控正在运行的代理,以解决死锁状况等问题。在生产环境中,死锁等问题可能是由 IO 错误、有缺陷的磁盘、内存不足或其他进程导致的 CPU 使用量过量造成的。

Critical 分析器定期测量关键操作的响应时间,如队列发送(即将消息添加到代理上的队列)和日志操作。如果已检查操作的响应时间超过可配置的超时值,则代理将被视为不稳定。在这种情况下,您可以将 Critical Analyzer 配置为只记录消息或采取措施保护代理,如关闭代理或停止运行代理的虚拟机(VM)。

7.1. 配置 Critical Analyzer

以下流程演示了如何配置 Critical 分析器以监控代理是否存在问题。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。

    Critical Analyzer 的默认配置如下所示。

    <critical-analyzer>true</critical-analyzer>
    <critical-analyzer-timeout>120000</critical-analyzer-timeout>
    <critical-analyzer-check-period>60000</critical-analyzer-check-period>
    <critical-analyzer-policy>HALT</critical-analyzer-policy>
  2. 指定参数值,如下所述。

    critical-analyzer
    指定是否启用或禁用 Critical 分析器工具。默认值为 true,这意味着启用了 工具。
    critical-analyzer-timeout
    Critical Analyzer 运行的检查的超时时间,以毫秒为单位。如果其中一个检查的操作用时超过这个值,代理就会被视为不稳定。
    critical-analyzer-check-period
    每次操作的连续检查间隔,关键分析器之间的时间间隔为毫秒。
    critical-analyzer-policy
    如果代理失败并被视为不稳定,此参数指定代理是记录消息(LOG)、停止托管代理的虚拟机(VM)还是关闭代理(SHUTDOWN)。

    根据您配置的策略选项,如果关键操作的响应时间超过配置的超时值,则输出类似于以下之一:

    critical-analyzer-policy=LOG

    [Artemis Critical Analyzer] 18:11:52,145 WARN [org.apache.activemq.artemis.core.server] AMQ224081: The component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    critical-analyzer-policy=HALT

    [Artemis Critical Analyzer] 18:10:00,831 ERROR [org.apache.activemq.artemis.core.server] AMQ224079: The process for the virtual machine will be killed, as component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    critical-analyzer-policy=SHUTDOWN

    [Artemis Critical Analyzer] 18:07:53,475 ERROR [org.apache.activemq.artemis.core.server] AMQ224080: The server process will now be stopped, as component org.apache.activemq.artemis.tests.integration.critical.CriticalSimpleTest$2@5af97850 is not responsive

    您还可以在类似以下内容的代理中看到线程转储:

    [Artemis Critical Analyzer] 18:10:00,836 WARN  [org.apache.activemq.artemis.core.server] AMQ222199: Thread dump: AMQ119001: Generating thread dump
    * =============================================================================== AMQ119002: Thread Thread[Thread-1 (ActiveMQ-scheduled-threads),5,main] name = Thread-1 (ActiveMQ-scheduled-threads) id = 19 group = java.lang.ThreadGroup[name=main,maxpri=10] sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745) =============================================================================== ..... .......... =============================================================================== AMQ119003: End Thread dump *

修订于 2022-04-03 11:52:11 +1000