RocketMQ 5.3.2 gRPC批量发送不同Tag、不同MessageId的消息,在接收时无法得到正确结果 #9646
Unanswered
SweetAAAAAA
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
场景
我使用的语言是 PHP,框架用的是 Hyperf,目前正在制作 RocketMQ 的SDK。
我发现
SendMessageRequest
可以批量发送消息,但尝试的过程中发现了这种无法获取正确结果的问题。复现流程
条件:通过gRPC访问RocketMQ的Proxy
messages
字段塞入三条不同Tag、不同MessageId的消息*
,并发送请求个人研究
Client 的研究
我确保自己编写的Client生成了不同的MessageId,并且消息体指定的也是不同的Tag:
同时抓包,确认 SendMessageRequest 和 SendMessageResponse:
SendMessageRequest:
第一条
第二条
第三条
SendMessageResponse:
服务端确实返回了刚刚发送的 MessageId。
至此,发送过程看起来似乎是没有问题的,所以我再去看了一下 ReceiveMessageRequest 和 ReceiveMessageResponse:
ReceiveMessageRequest
ReceiveMessageResponse
第一条
第二条
第三条
至此可以发现三条消息,有相同的 messageId 和 tag。
Server 端的研究
我先查找了一下 ReceiveMessage 这个方法,调用链如下:
从 popMessage 那边回来的结果就是不对的,“监视”窗口那边的结果没有发生改变:
跟进一下 popMessage:
看到 Code,检查一下引用,发现到了 Broker 里面:
但是看了一下代码,好像没有对这个 UNIQ_KEY 进行操作的,但是全局搜索一下有个 buildCkMsg 有这个引用,然后看一下调用链,猜测有可能是消息存储时就有这个问题:
Beta Was this translation helpful? Give feedback.
All reactions