Red Hat AMQ Broker 7.9 发行注记
AMQ Broker 发行注记
摘要
使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 增强
本节论述了 AMQ Broker 7.9 中一组突出显示的增强功能和新功能。有关发行版本的完整列表,请参阅 AMQ Broker 7.9.0 增强。
如果需要最新的 AMQ Broker 长期支持(LTS)版本,请参阅 AMQ Broker 7.8。
- AMQP 服务器连接
-
代理可以使用 AMQP 协议发起到其他端点的连接。例如,这意味着代理可以连接到其他 AMQP 服务器,并在这些连接中创建元素。此功能使用
<broker-connection>
元素实现,如 配置 AMQ Broker 所述。
- Operator 支持监视所有或多个命名空间
在以前的版本中,您要在需要代理部署的每个命名空间中安装 AMQ Broker Operator。从 7.9 开始,AMQ Broker Operator 支持监视所有或多个命名空间是否有代理自定义资源。如需更多信息,请参阅在 OpenShift 中部署 AMQ Broker。
注意如果您在集群中的命名空间中安装了 AMQ Broker Operator 的早期版本,红帽建议您不要安装 AMQ Broker Operator 7.9 版本来监视该命名空间以避免潜在的冲突。
- 临时队列命名空间
-
在 AMQ Broker 7.9 中,您可以在
broker.xml
配置文件中指定临时队列 - Operator 频道
以下频道提供了 AMQ Broker Operator
Red Hat Integration - RHEL 8 的 AMQ Broker(Multiarch)
:-
7.x
- 此频道将安装7.9
并将在以后的某个时候更新至7.10
。如果现在要安装7.10
,可以订阅7.10.x
频道。 -
7.8.X -
这是长期支持(LTS)通道。
要确定要选择哪个 Operator,请参阅 Red Hat Enterprise Linux Container Compatibility Matrix。
-
- 主机默认验证
-
应用到连接器时,valid
Host
的默认值已从false
更改为true
。现在,所有代理连接都默认验证主机。acceptors 的默认值仍为false
。
- 使用 CR 启用 Prometheus 插件
- 除了使用环境变量启用插件外,您还可以使用 CR 在 OpenShift 上启用 Prometheus 插件。这两个选项都描述了 为 On-Premise 部署 AMQ Broker。
第 2 章 删除的功能
7.9 中不再提供以下功能:
- OpenJ9 images
- 基于 OpenJ9 的 IBM Z(s390x)和 IBM Power Systems(ppc64le)镜像不再被支持。这些平台的新镜像基于 OpenJDK。
- 基于模板的安装
- 在 OpenShift Container Platform 上部署 AMQ Broker 的应用程序模板在以前的版本中已弃用,现已被删除。使用 AMQ Broker Operator,如使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker 所述。
- OpenShift Container Platform 3.11
- 不再支持在 OpenShift Container Platform 3.11 上部署 AMQ Broker。OpenShift Container Platform 4.6、4.6 或 4.8 支持 AMQ Broker。
- 基于 RHEL 7 的镜像
- 在 OpenShift Container Platform 上部署 AMQ Broker 现在都使用基于 RHEL 8 的镜像。
- Documentation
- AMQ Broker 指南中使用 JON 不再作为 AMQ Broker 文档的一部分发布。但是,作为 AMQ Broker 7.8 文档 的一部分,您仍然可以访问最后发布的版本。
第 3 章 已弃用的功能
本节论述了支持但已从 AMQ Broker 中弃用的功能。
- OpenWire 协议
- 从 7.9 开始,OpenWire 协议是一个弃用的功能。如果您要创建新的基于 AMQ Broker 的系统,请使用其他支持的协议之一。此功能将在以后的发行版本中删除。
- Hawtio 分配控制台插件
-
从 7.3 开始,AMQ Broker 不再附带 Hawtio 分配控制台插件, allocate
-hawtio-console.war
。在以前的版本中,分配控制台用于管理 AMQ Interconnect。但是,AMQ Interconnect 现在使用自己的独立 Web 控制台。 - 网络 pinger
- 从 7.5 开始,网络 ping 是一个弃用的功能。网络 ping 无法防止代理集群遭受网络隔离问题的影响,这些问题可能会导致无法恢复的信息丢失。此功能将在以后的发行版本中删除。红帽继续支持使用网络 ping 的现有 AMQ Broker 部署。但是,红帽不建议在新部署中使用网络 ping。有关配置代理集群以获取高可用性并避免网络隔离问题的指导,请参阅配置 AMQ Broker 中实施高可用性。
第 4 章 技术预览
本节论述了 AMQ Broker 7.9 中的技术预览功能。
技术预览功能不被红帽产品服务级别协议(SLA)支持,且可能无法完成功能。红帽不建议在生产环境中使用它们。如需更多信息,请参阅红帽技术预览功能支持范围。
- 仲裁投票改进
- 在以前的 AMQ Broker 版本中,您需要配置至少三个实时备份对,从而避免在使用复制高可用性(HA)策略时有两个实时代理。从 7.9 开始,您可以将故障切换配置为使用 Apache Curator 和 Apache ZooKeeper 使用两个代理提供仲裁投票。有关使用此功能的信息,请参阅 Apache ActiveMQ Artemis 文档中的 高可用性和故障切换。
- 客户端连接均衡改进
-
在以前的版本中,没有方法平衡客户端连接服务器端。从 7.9 开始,您可以指定用于平衡客户端连接的代理池和策略。例如,您可以指定一个
LEAST_CONNECTIONS
策略,以确保客户端被重定向到最少活跃连接的代理。有关使用此功能的详情,请参考 Apache ActiveMQ 6.3 文档中的 Broker Balancer。 - 在 Fuse 控制台中查看代理
您可以配置基于 Operator 的代理部署,以将 Fuse Console 用于 OpenShift 而不是 AMQ 管理控制台。当您正确配置代理部署后,Fuse 控制台会发现代理并将其显示在专用的
Artemis
选项卡上。如需更多信息,请参阅 在 OpenShift 上部署 AMQ Broker 中的 Fuse Console 中的查看代理。注意在 Fuse 控制台中查看代理是 Fuse 7.8 的 技术预览功能。
第 5 章 修复的问题
如需在发行版本中修复的完整问题列表,请参阅 AMQ Broker 7.9.0 修复的问题和 AMQ Broker - 7.9.x 解析的问题。
第 6 章 修复了常见漏洞和风险
本节详细介绍了 AMQ Broker 7.9 发行版本中修复的通用漏洞和风险(CVE)。
- ENTMQBR-4071 - CVE-2020-13956 httpclient: apache-httpclient: 在请求 URI 中处理不正确的授权组件
- ENTMQBR-4677 - CVE-2021-21290 netty:通过本地系统临时目录披露信息
- ENTMQBR-4775 - CVE-2020-27223 jetty: 包含多个 Accept 标头的请求(带有大量"质量"参数)可能会导致 DoS
- ENTMQBR-4779 - CVE-2021-3425 代理:Red Hat AMQ Broker:在应用程序日志文件中释放 JDBC 用户名和密码
- ENTMQBR-4795 - CVE-2021-21295 netty: 在 HTTP/2 中因为缺少验证而可能的请求发生
- ENTMQBR-4829 - CVE-2021-21409 netty:通过 content-length 标头请求调用
- ENTMQBR-4907 - CVE-2021-28163 jetty-server: jetty:symlink 目录公开 webapp 目录内容
- ENTMQBR-4911 - CVE-2021-28165 jetty-server: jetty:在接收无效的大型 TLS 帧时耗尽资源
- ENTMQBR-4912 - CVE-2021-28164 jetty-server: jetty:模糊路径可以访问 WEB-INF
- ENTMQBR-4960 - CVE-2021-29425 commons-io: apache-commons-io:Apache Commons IO 2.2 到 2.6 中的有限路径
- ENTMQBR-5118 - CVE-2021-28169 jetty-server: jetty: 对 ConcatServlet 和 WelcomeFilter 的请求能够访问 WEB-INF 目录中受保护的资源
- ENTMQBR-5165 - CVE-2021-34428 jetty-server: jetty:SessionListener 可以防止会话被无效的破坏注销
- ENTMQBR-5229 - CVE-2021-20289 resteasy-jaxrs: resteasy:错误消息公开端点类信息
- ENTMQBR-5250 - CVE-2021-34429 jetty-server: jetty: 精心设计的 URI 允许绕过安全约束
- ENTMQBR-5398 - CVE-2021-3763 AMQ Broker 7:管理控制台中的权限不正确
第 7 章 已知问题
本节论述了 AMQ Broker 7.9 中的已知问题。
ENTMQBR-5749 - 删除 OperatorHub 中可见的不受支持 Operator
仅支持 从 OperatorHub 部署 Operator 中的 Operator 和 Operator 频道。出于与 Operator 发布相关的技术原因,OperatorHub 中会显示其他 Operator 和频道,因此应忽略。作为参考,以下列表显示了哪些 Operator 是可见但不支持的:
- Red Hat Integration - AMQ Broker LTS - 所有频道
- 红帽集成 - AMQ Broker - alpha、当前和 current-76
ENTMQBR-5615 - artemis.profile 防止"init 容器镜像"方法出现意外的中断变化
如果您使用 JVM 选项
-Dhawtio.role
将用户角色设置为artemis_profile 文件的 $JAVA_
ARGS 部分的一部分,用户可能无法访问代理控制台。这个问题是由一个新的属性
HAWTIO_ROLE
造成的,它覆盖了-Dhawtio.role
设置的任何值。要解决这个问题,请使用etc/artemis.profile
文件中的HAWTIO_ROLE
属性来设置适当的角色。
ENTMQBR-17 - AMQ222117:无法启动集群连接
代理集群可能无法在支持 IPv6 的环境中正确初始化。故障源自一个
SocketException
,它通过日志消息Can't 分配请求的地址
来指明。要临时解决这个问题,请将java.net.preferIPv4Stack
系统属性设置为true
。
ENTMQBR-520 - 不允许从名称与绑定到其他地址的队列相同的地址接收
名称与地址相同的队列只能分配给地址。创建与现有地址名称相同但绑定到具有不同名称的地址的队列无效配置。这样做可能会导致错误的消息路由到队列。
ENTMQBR-569 - 将 ID 从 OpenWire 转换为 AMQP 会导致将 ID 作为二进制发送
从 A-MQ 6 OpenWire 客户端将跨协议通信到 AMQP 客户端时,其他信息将在应用消息属性中编码。这是代理内部使用的良性信息,可以忽略。
ENTMQBR-599 - 由 Artemis cli 定义信任存储和密钥存储
使用
--ssl-key、--ssl-key
-password、--
创建代理实例无法正常工作。要临时解决这个问题,在创建代理后在ssl-
trust 和--ssl
-trust-password 参数bootstrap.xml
中手动设置对应的属性。
ENTMQBR-636 - 日志中断,在 perf 负载(mpt)下导致
JavaNullPointerException
.为防止代理管理重度负载时发生 IO 相关问题,请验证 JVM 分配有足够的内存和堆空间。请参阅 ActiveMQ Artemis 文档中的 性能调优 章节中标题为"测试虚拟机"的小节。
ENTMQBR-648 - JMS Openwire 客户端无法通过定义的
purgeOnNoConsumer
或 queue过滤器
发送消息到队列如果队列没有使用者,使用 A-MQ 6 JMS 客户端发送消息到具有
purgeOnNoConsumer
设为true
的队列的地址。建议您在使用 A-MQ 6 JMS 客户端时不要设置purgeOnNoConsumer
选项。
ENTMQBR-652 - 已知的
amq-jon-plugin 错误
列表此版本的
amq-jon-plugin
已知代理和队列的 MBeans 存在问题。代理 MBean 的问题:
-
关闭连接会引发
java.net.SocketTimeoutException
异常 -
listSessions()
throwsjava.lang.ClassCastException
-
添加地址设置会抛出
java.lang.IllegalArgumentException
-
无法找到
getConnectorServices()
操作 -
无法找到
列表ConsumersAsJSON()
操作 -
无法找到
getDivertNames()
操作 -
列出网络拓扑抛出
IllegalArgumentException
- 删除地址设置有错误的参数名称
队列 MBean 的问题:
-
expireMessage()
抛出参数类型不匹配异常 -
listDeliveringMessages()
throwsIllegalArgumentException
-
listMessages()
throwsjava.lang.Exception
-
moveMessages()
抛出 IllegalArgumentException
,并带有错误消息参数类型 mismatch -
removeMessage()
抛出 IllegalArgumentException
并带有错误消息参数类型 mismatch -
removeMessages()
抛出异常,错误 Can't find operation removeMessage with 2 参数 -
retryMessage()
抛出参数类型不匹配IllegalArgumentException
-
关闭连接会引发
ENTMQBR-655 - [AMQP] 在
启用填充验证用户时无法
发送消息对于使用 AMQP 协议生成的消息,配置选项不支持填充
验证用户。
ENTMQBR-897 - Openwire 客户端/协议问题在目标名称中带有特殊字符
目前,AMQ OpenWire JMS 客户端无法访问在其名称中包含下列字符的队列和地址:逗号('')、hash('#')、大于('>')和空格。
ENTMQBR-944 - [A-MQ7、Hawtio、RBAC] 用户如果 RBAC 拒绝操作访问,则不会获得任何反馈
控制台可以指示未授权用户尝试的操作在未成功时成功。
ENTMQBR-1875 - [AMQ 7、ha、复制存储] 备份代理在之后显示"活动"或关闭 - ActiveMQIllegalStateException errorType=ILLEGAL_STATE 消息=AMQ119026:备份服务器尚未与实时同步
在备份代理尝试与 master 代理同步时删除 master 代理的分页磁盘会导致 master 代理失败。另外,备份代理无法处于活动状态,因为它会继续尝试与 master 同步。
ENTMQBR-2068 - 某些消息在 HA 故障切换、故障恢复期间接收但未发送
目前,如果 OpenWire 客户端正在发送消息时代理无法切换到其从设备,则在发生故障转移时将消息传送到代理。要临时解决这个问题,请确保代理在声明消息前保留它们。
ENTMQBR-2928 - Broker Operator 无法从 CR 更改中恢复,从而导致错误状态
如果 AMQ Broker Operator 在应用自定义资源(CR)更新时遇到错误,Operator 将无法恢复。特别是,Operator 会正常停止响应,进一步更新 CR。
例如,假设 main broker CR 中的
image
属性值拼写错误,会导致代理 Pod 无法部署,以及关联的ImagePullBackOff
错误消息。如果您随后修复了拼写错误并应用 CR 更改,Operator 不会部署指定数量的代理 Pod。另外,Operator 不会响应任何进一步的 CR 更改。要临时解决这个问题,您必须先删除您原先部署的 CR,然后才能重新部署它们。要删除现有的 CR,请使用
oc delete -f <CR name>
等命令。
ENTMQBR-3846 - MQTT 客户端不会在代理重启时重新连接
当您重启代理或代理失败时,活跃代理不会恢复之前连接的 MQTT 客户端的连接。要临时解决这个问题,若要重新连接 MQTT 客户端,您需要在客户端上手动调用
subscribe()
方法。
ENTMQBR-4023 - AMQ Broker Operator:Pod 状态 pod 名称不反映现实
对于给定 OpenShift 项目中基于 Operator 的代理部署,如果您使用
oc get pod
命令列出代理 Pod,Pod 的序值从0
开始,例如amq-operator-test-broker-s-0
。但是,如果您使用oc describe
命令获取从activemqartmises 自定义资源(即
)创建的代理 Pod 的状态,Pod 序值会错误地从oc describe activemqartemises
1
开始,例如amq-operator-test-broker-ss-1
。无法解决这个问题。
ENTMQBR-4127 - AMQ Broker Operator:Operator 生成的路由名称对于 OpenShift 来说可能太长
对于基于 Operator 的部署中的每个代理 Pod,Operator 为访问 AMQ Broker 管理控制台而创建的路由的默认名称包括自定义资源(CR)实例的名称、OpenShift 项目的名称以及 OpenShift 集群的名称。例如,my
-broker-deployment-wconsj-0-svc-rte-my-openshift-project.my-openshift-domain
。如果其中某些名称很长,默认的 Route 名称可能会超过 OpenShift 强制执行的 63 个字符的限制。在本例中,在 OpenShift Container Platform Web 控制台中,Route 的状态为Rejected
。要临时解决这个问题,使用 OpenShift Container Platform Web 控制台手动编辑 Route 的名称。在控制台中点击 Route。在右上角的 Actions 下拉菜单中,选择
Edit Route
。在 YAML 编辑器中,找到spec.host
属性并编辑值。
ENTMQBR-4140 - AMQ Broker Operator:如果
storage.size
指定不正确,则安装将不可用如果您将自定义资源(CR)实例的
storage.size
属性配置为指定部署中持久性存储所需的持久性卷声明(PVC)的大小,如果没有正确指定此值,Operator 安装将不可用。例如,假设将storage.size
的值设置为1
(即,不指定单位)。在这种情况下,Operator 无法使用 CR 创建代理部署。另外,即使您删除了 CR 并正确部署了指定storage.size
的新版本,Operator 仍然无法使用这个 CR 创建部署。要临时解决这个问题,请首先停止 Operator。在 OpenShift Container Platform web 控制台中点 Deployments。对于与 AMQ Broker Operator 对应的 Pod,请点击 More options 菜单(三个垂直点)。点 Edit Pod Count,将值设置为
0
。当 Operator Pod 停止时,创建带有storage.size
的新版本 CR。然后,要重启 Operator,请再次点击 Edit Pod Count,并将值重新设置为1
。
ENTMQBR-4141 - AMQ Broker Operator:增大持久性卷大小需要手动参与,即使重新创建有状态集后也是如此
如果您在持久性存储的部署中尝试增大代理所需的持久性卷声明(PVC)的大小,则在没有进一步手动步骤的情况下更改不会生效。例如,假设您将自定义资源(CR)实例的
storage.size
属性配置为为 PVC 指定初始大小。如果您修改 CR 以指定 不同的storage.size
值,现有代理将继续使用原始 PVC 大小。即使您将部署缩减为零代理,然后备份到原始数字,也是如此。但是,如果您扩展部署的大小来添加额外的代理,新代理会使用新的 PVC 大小。要临时解决这个问题,并确保部署中的所有代理都使用相同的 PVC 大小,请使用 OpenShift Container Platform Web 控制台来扩展部署使用的 PVC 大小。在控制台中,单击 Actions 下拉菜单中,选择
→ 。单击您的部署。在右上角的Expand PVC 并
输入一个新值。
第 8 章 重要链接
在 2022-07-09 20:35:29 +1000 上修订