NewLifeX / NewLife.RocketMQ

纯托管轻量级RocketMQ客户端,支持发布消息、消费消息、负载均衡等核心功能!
MIT License
212 stars 79 forks source link

使用阿里云地域的服务器地址 #77

Closed zuxiadulinbo closed 1 month ago

zuxiadulinbo commented 7 months ago

在使用阿里云公网的服务器地址可以正常的发送和接收消息,但是使用地域(我使用的杭州)就要报错。 微信截图_20240410173129

nnhy commented 7 months ago

[improv]改进阿里云rocketmq对接。在过去两年时间里,阿里云rocketmq做了升级,导致某些指令兼容性没那么好,这里统一做兼… · NewLifeX/NewLife.RocketMQ@b7d0910 https://github.com/NewLifeX/NewLife.RocketMQ/commit/b7d0910676bd56144034943746809eacb8968001

nnhy commented 7 months ago

RocketMQ的逻辑,先请求NameServer查询Topic所在Broker,然后直连Broker进行发布和消费。 然而阿里云的rocketmq在内网,再通过网关把NameServer和Broker暴露到公网。 昨晚经过测试,公网拉取到的Broker是经过映射的,不再是原始内网的broker地址,所以能发布。但是获取消费组状态(offset等)时,得到的偏移量挂在内网broker地址上,导致无法匹配。所以,公网消费理论上是有问题的,只能丢消息直接从最新消费,或者从最老消费。 而vpc内网,可以直接发布与消费。

我的测试是,内网正常,公网不正常。不明白为何跟你遇到的情况相反。

上图_queues为空,那是因为连上broker以后,还没有更新队列信息,服务端主动下发了一条消息,解析匹配时报错。该问题已修正,并不影响发布消费使用。