第 3 章 新的和更改的功能

本节介绍了 AMQ Broker 7.11 中突出显示的一组增强功能和新功能。

限制用于分页的磁盘空间
如果将 AMQ Broker 配置为页面信息,您可以限制用于页面传入消息的磁盘空间,以防止分页操作使用过量磁盘空间。如需更多信息,请参阅配置 AMQ Broker 中的 特定地址在分页过程中限制磁盘用量
限制用于从分页读取的消息的内存
如果将 AMQ Broker 配置为页面信息,您可以在客户端准备好使用消息时限制代理从磁盘传输到内存的消息的内存。如需更多信息, 请参阅配置 AMQ Broker 中的将页面消息流控制到内存中
重要

如果客户端应用程序缺少太多消息待处理确认,代理不会在确认待处理消息前读取页面消息,这会导致代理上出现消息不足。

例如,如果将页面消息传输到内存(默认为 20MB)的限值被访问,则代理会在读取任何更多消息前等待来自客户端的确认。如果同时,客户端在向代理发送确认前等待接收足够消息(由客户端使用的批处理大小决定),代理会耗尽消息。

为避免不足,可以将控制页面消息传输的代理限制增加到内存中,或减少传递消息的数量。您可以通过确保客户端很快提交消息确认,或使用超时和提交确认(不从代理接收更多消息)来减少发送消息的数量。

您可以在 AMQ 管理控制台中看到在队列的交付计数和交付 Bytes 指标中传递消息的编号和大小。

Log4j 2 日志记录支持
从 7.11 开始,AMQ Broker 使用 Log4j 2 日志记录工具,而不是 JBoss Logging 框架来提供消息日志记录。您可以在 OpenShift Container Platform 和 RHEL 平台上自定义 Log4j 2 日志记录配置。
更改 Operator 日志记录级别
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,您可以更改默认日志级别,以增加或减少写入 Operator 日志的详细信息。如需更多信息,请参阅在 Openshift 上部署 AMQ Broker 中的更改 Operator 的日志级别
支持 Java 身份验证和授权服务(JAAS)登录模块
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,您可以在 secret 中配置 JAAS 登录模块,而不使用 ActiveMQArtemisSecurity CR 为 AMQ Broker 配置用户身份验证和授权。通过在 secret 中配置 JAAS 登录模块,您可以在属性文件中更新用户和角色信息,而无需重启代理。另外,您可以配置在 CR 中不可配置的登录模块,如 LDAP。如需更多信息,请参阅在 Openshift 上部署 AMQ Broker 中的在 secret 中配置 JAAS 登录模块
限制升级
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,Operator 会自动将代理容器镜像升级到最新的可用版本。您可以为部署配置自定义资源(CR),以防止自动升级,或者只允许自动升级到特定版本或特定代理和 init 容器镜像。
注意

如果要限制自动升级,则必须在 CR 中指定组合的 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性,但不能同时指定 CR 中的 spec.deploymentPlan. image 和 spec.deploymentPlan.initImage 属性。

如需更多信息,请参阅在 Openshift 上部署 AMQ Broker 中的 限制自动升级

扩展状态报告

在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,Operator 在主代理 CR 中报告的状态信息被扩展为包括:

  • CR 内容的有效性。
  • brokerProperties 属性中配置的属性应用。
  • 将 secret 中的 Java 身份验证和授权服务(JAAS)登录模块文件传播到代理 Pod。
  • 部署的代理版本,以及该版本的代理和 init 容器镜像的 URL。
  • 将主要、次版本、补丁和安全升级应用到部署的能力。
同步镜像支持
从 7.11 开始,您可以在代理之间配置同步镜像,以确保消息同时写入镜像中的所有代理卷。通过使用同步镜像,您可以确保已镜像的代理是灾难恢复的最新代理。如需更多信息, 请参阅配置 AMQ Broker 中的配置代理连接
Pod 中断预算
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,您可以配置 Pod 中断预算,以指定集群中必须同时可用的最少的 Pod 数量,如维护窗口。如需更多信息,请参阅在 OpenShift 上部署 AMQ Broker 中的 配置 Pod 中断预算
brokerProperties 配置存储在 mutable secret 中
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,使用 CR 中的 brokerProperties 属性创建的配置存储在 mutable secret 中。可以在不需要代理重启的情况下更新可变 secret。因此,代理定期重新载入配置时应用配置更新,除了特别需要代理重启的任何更新外。
控制嵌入式 Web 服务器的操作
从 7.11 开始,您可以使用 stopEmbedded JMX MBean 停止并重启 AMQ Broker 的嵌入式 Web 服务器。在 ActiveMQServerControl JMX MBean 上,您可以停止并重新启动 AMQ Broker。 通过使用这些操作,您可以避免在更新 AMQ Broker 的 SSL 证书时重启 AMQ Broker。
用于登录到 AMQ 管理控制台的凭证用于发送消息

在之前的 AMQ Broker 版本中,需要在 AMQ Management Console Preferences 页面中指定用户名和密码,以便在 AMQ 管理控制台中发送消息。从 7.11 开始,消息会使用您用来登录到 AMQ 管理控制台的凭据发送。

您可以覆盖默认行为,并指定不同的凭证来发送单个消息。如需更多信息,请参阅 管理 AMQ Broker 中的 向地址 发送信息。

OpenShift Container Platform 上的 AMQ Broker 已预先配置,以便为 Prometheus 收集指标数据
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,AMQ Broker 容器 Pod 已预先配置,以便 Prometheus Operator Service Monitor 收集指标数据。在以前的版本中,您需要公开 Service Monitor 需要的端口来收集指标数据。
为代理容器设置环境变量
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,您可以在传递给每个代理容器的自定义资源(CR)中设置环境变量。例如,您可以添加 TZ 环境变量来设置代理容器的时区。如需更多信息,请参阅在 OpenShift 上部署 AMQ Broker 中的 为代理容器设置环境变量
OpenShift Container Platform 上的代理转发支持
在 OpenShift Container Platform 上的 AMQ Broker 7.11 中,嵌入的 Web 服务器(托管 AMQ 管理控制台)已预先配置,以处理 X-Forwarded 标头。通过处理 X-Forwarded 标头,AMQ 管理控制台可以接收当涉及请求路径时更改或丢失的标头信息。例如,AMQ 管理控制台使用 HTTP,但 OpenShift Container Platform 路由器(一个代理)使用路由器终止的 HTTPS 路由公开 AMQ 管理控制台。从 X-Forwarded 标头中,AMQ 管理控制台可以识别浏览器和路由器之间的连接使用 HTTPS 并切换到 HTTPS 来提供浏览器请求。
只有在 brokerProperties CR 属性中才支持一些重新发送属性

如果 7.8.x 或 7.9.x 部署有 redeliveryDelayMultiplierredeliveryCollisionAvoidanceFactor 属性,在升级到 7.11.x 后,您必须在 brokerProperties CR 属性中配置这些属性。这是必要的,因为这两个属性的数据类型从浮点改为 7.10.0 中的字符串。因此,spec.deploymentPlan.addressSettings.addressSetting 属性中不再支持这些属性。

以下示例演示了如何在 brokerProperties 元素中配置这两个属性:

spec:
  ...
  brokerProperties:
  - "addressSettings.#.redeliveryMultiplier=2.1"
  - "addressSettings.#.redeliveryCollisionAvoidanceFactor=1.2"
  ...
注意

brokerProperties 属性中,使用 redeliveryMultiplier 属性名称而不是 spec.deploymentPlan.addressSetting 元素中使用的 redeliveryDelayMultiplier 属性名称。

禁用 XML 外部实体(XXE)处理
如果您不需要将代理配置嵌套到 broker.xml 文件包含的独立文件中,您现在可以禁用 XXE 处理来防止 XXE 安全漏洞。红帽建议您尽可能禁用 XXE 处理。如需更多信息,请参阅配置 AMQ Broker 中的 禁用外部 XML 实体(XXE)处理
JGroups 5.x
7.10.0 使用 JGroups 3.x 前的 AMQ Broker 版本。AMQ Broker 7.11 使用 JGroups 5.x,它与 JGroups 3.x 向后兼容。在两个 JGroup 版本之间更改了一些协议和协议属性,因此您必须在升级到 AMQ Broker 7.11 时更改 JGroups 堆栈配置。
提取到特定目录名称的 AMQ Broker 归档内容
当您在 Red Hat Enterprise Linux 上提取 AMQ Broker 归档时,存档的内容将提取到当前目录中名为 apache-artemis-2.28.0.redhat-00004 的目录中。
Operator 频道

AMQ Broker Operator ( Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) )可用于以下频道:

  • 7.11.x - 此频道只为版本 7.11 提供更新,它是一个长期支持(LTS)频道。
  • 7.10.x - 此频道只为版本 7.10 提供更新,它是一个长期支持(LTS)频道。
注意

无法通过切换频道来升级 Operator。您必须卸载现有的 Operator,并从适当的频道安装 Operator 的新版本。

要确定要选择的 Operator,请查看 Red Hat Enterprise Linux Container Compatibility Matrix

进入 Prometheus 指标插件的类名称
在 AMQ Broker 7.11 中,AMQ Broker 中包含的 Prometheus 指标插件的类名称从 org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin 改为 com.redhat.amq.broker.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin。如果在 AMQ Broker 的早期版本中启用了 Prometheus metrics 插件,您必须在升级到 AMQ Broker 7.11 时更新 broker.xml 配置文件中的类名称。如需更多信息,请参阅管理 AMQ Broker 中的 将 代理实例从 7.10.x 升级到 7.11.x
更改了列表Producers API 方法返回的数据,以及列表ProducersInfoAsJSON JMX 方法

在 AMQ Broker 7.11 中,以下改进是如何 列出Producers 方法返回的数据,该方法由 AMQ 管理控制台使用:

  • 在之前的版本返回的数据中,每个会话会显示一个制作者。因此,如果您使用 Core 协议创建了一个制作者,它会为每个处理程序创建两个会话,则会为每个会话显示单独的制作者。另外,如果您在不从制作者发送消息的情况下创建了制作者,则为制作者返回的地址为空。在 AMQ Broker 7.11 中,列表Producers 方法返回 由核心协议创建的两个会话的单一制作者。此外,address 列会显示正确的地址,即使您在发送消息之前也是如此。
  • 在以前的版本中,当使用匿名制作者使用 Core 或 AMQP 协议向多个地址发送消息时,每个地址会显示生成者。此外,显示的地址是制作者向其发送消息的第一个地址,它类似于发送到单个队列的常规制作者。在 AMQ Broker 7.11 中,当您使用匿名制作者向多个地址发送消息时,会为每个匿名制作者显示一个制作者。此外,该地址没有连接到特定地址,其值为 ANONYMOUS

在以前的版本中,listProducersInfoAsJSON 方法提供了特定会话发送到每个队列的消息计数。但是,此方法会错误地返回消息发送到的每个队列的制作者。例如,如果匿名制作者向 1000 个队列发送一条消息,此方法会返回 1000 个制作者。在 AMQ Broker 7.11 中,listProducersInfoAsJSON 方法现在准确返回与 listProducers 方法相同的数据,但采用不同的格式。

在 AMQ Broker 7.11 中,返回以下新指标数据:

消费者

messagesInTransit -尚未确认的消息数

messagesInTransitSize - 尚未确认的消息的总大小

messagesDelivered - 发送的消息数

messagesDeliveredSize - 发送的消息总量

messagesAcknow ged - 确认的信息总数

messagesAcknowledgedAwaitingCommit - 已确认的事务中消息总数,但等待提交

lastDeliveredTime - 发送的最后一个消息的时间(毫秒)

lastAcknowledgedTime - 确认最后一次消息的时间(毫秒)

producers

msgSent - 生成者发送的消息数量

msgSizeSent - 生成者发送的消息总量

lastProducedMessageID - 发送的最后一个消息的 ID