第 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() throws java.lang.ClassCastException
    • 添加地址设置会抛出 java.lang.IllegalArgumentException
    • 无法找到 getConnectorServices() 操作
    • 无法找到 列表ConsumersAsJSON() 操作
    • 无法找到 getDivertNames() 操作
    • 列出网络拓扑抛出 IllegalArgumentException
    • 删除地址设置有错误的参数名称

    队列 MBean 的问题:

    • expireMessage() 抛出参数类型不匹配异常
    • listDeliveringMessages() throws IllegalArgumentException
    • listMessages() throws java.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 自定义资源(即 oc describe activemqartemises )创建的代理 Pod 的状态,Pod 序值会错误地从 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 大小。在控制台中,单击 StoragePersistent Volume Claims。单击您的部署。在右上角的 Actions 下拉菜单中,选择 Expand PVC 并 输入一个新值。