开发者社区 > 云原生 > 消息队列 > 正文

Rocketmq5 proxy兼容rocketmq4.9.1的问题

我的服务端是5.2.0,客户端是4.9.1,在发送消息的时候报了 15 Request doesn't have field bname的报错,我看proxy里的源码是需要判断请求里是否存在bname这个字段

if (request.getCode() == RequestCode.SEND_MESSAGE_V2) {
            if (request.getExtFields().get(BROKER_NAME_FIELD_FOR_SEND_MESSAGE_V2) == null) {
                return RemotingCommand.buildErrorResponse(ResponseCode.VERSION_NOT_SUPPORTED,
                    "Request doesn't have field bname");
            }
            brokerName = request.getExtFields().get(BROKER_NAME_FIELD_FOR_SEND_MESSAGE_V2);
        } else {
            if (request.getExtFields().get(BROKER_NAME_FIELD) == null) {
                return RemotingCommand.buildErrorResponse(ResponseCode.VERSION_NOT_SUPPORTED,
                    "Request doesn't have field bname");
            }
            brokerName = request.getExtFields().get(BROKER_NAME_FIELD);
        }

我排查下来是因为4.9.1版本的SendMessageRequestHeader中缺少了requestHeader.setBname(mq.getBrokerName());这段代码和RpcRequestHeader这个父类。
我修改了这部分代码并在createSendMessageRequestHeaderV2中增加了字段n后就可以正常发送消息了,但是我看兼容性文档中说rocketmq5是完全兼容rocketmq4.9版本的,所以想问一下在不升级客户端的情况下是否有其他方式发送消息或者说只能升级客户端版本才行,谢谢。
具体的修复是不是在这里完成的?[ISSUE #3905] Support bname in protocol for 4.9.x client

展开
收起
游客zcsfjlubca6ks 2024-03-14 17:20:43 56 0
2 条回答
写回答
取消 提交回答
  • 从你的描述来看,RocketMQ 5.2.0服务端确实要求SEND_MESSAGE_V2请求中包含bname字段,而4.9.1客户端版本并未添加该字段。按照官方文档,RocketMQ 5应该是向后兼容4.9.x的,但在这种情况下,由于协议字段的变化导致了兼容性问题。如果您无法升级客户端至与服务端匹配的版本,一种临时解决方案是在客户端补丁级别解决此问题,例如参照您提到的GitHub ISSUE #3905进行修改。然而,为了长期稳定性和功能完整性,建议升级客户端至与服务端相匹配的版本。

    2024-03-15 14:23:16
    赞同 2 展开评论 打赏
  • 阿里云大降价~

    RocketMQ 5.0 引入了新的协议版本,而 RocketMQ 4.9.1 使用的是旧的协议版本。因此,在客户端和服务器端版本不匹配的情况下,可能会出现兼容性问题。

    为了解决这个问题,你可以考虑以下两种方法:

    1. 升级客户端到 RocketMQ 5.0 或更高版本,以匹配服务器端的协议版本。这样可以避免兼容性问题,并确保正常的通信。

    2. 如果你无法升级客户端,可以考虑使用 RocketMQ 4.9.1 版本的代理来兼容 RocketMQ 5.0 的客户端。你可以在代理中添加逻辑来处理 RocketMQ 5.0 中的新字段,并在发送请求时将其设置为默认值或忽略该字段。这样可以确保 RocketMQ 4.9.1 客户端与 RocketMQ 5.0 服务器之间的正常通信。

    需要注意的是,第二种方法可能会导致一些功能上的限制或不兼容的情况。因此,建议尽量升级客户端以保持最佳的兼容性和稳定性。

    2024-03-14 20:19:32
    赞同 1 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

  • 云消息队列 MQ
  • 热门讨论

    热门文章

    相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载