You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
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