NewLifeX / NewLife.RocketMQ

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

如何在一个Consumer上订阅多个主题? #82

Closed fxf568 closed 2 weeks ago

fxf568 commented 3 weeks ago

如何在一个consumer 订阅多个主题 微信图片_20241106142146 类似这样的

nnhy commented 3 weeks ago

可以实例化多个Consumer,各自订阅一个Topic,然后把消息都指向同一个消费函数

fxf568 commented 3 weeks ago

也是这么操作的,但是客户反馈说我的方式形成了多个多个Clinet,会引起丢包 微信图片_20241106142606 需要在一个client中的处理多个topic的订阅,这个可行吗? 使用的是阿里云的rocket mq

nnhy commented 3 weeks ago

多个client跟丢包没关系吧

fxf568 commented 3 weeks ago

多个client跟丢包没关系吧

我也认为是这样,但是没有确凿的证据证明,只能根据他们给解决思路进行,实现一个client中处理订阅多个topic,您有好的建议吗?

nnhy commented 3 weeks ago

你参考着再写一个Consumer类,使用Topics数组,拉取Queue的时候,分多次拉取,用字典记录每个Topic所拥有的Queue。消费的时候,轮流拉取各个Topic,或者开多线程拉取。 总的来说,即使这样子改,最终还是多个tcp网络连接。因为不同topic的queue,可能落在不同的broker上。

nnhy commented 3 weeks ago

还有一个办法,他说的丢包,可能跟ClientId重复有关,你试试给每个Consumer实例,设置不同的ClientId。 现在是 ip@port,你再加个序数呢

fxf568 commented 3 weeks ago

还有一个办法,他说的丢包,可能跟ClientId重复有关,你试试给每个Consumer实例,设置不同的ClientId。 现在是 ip@port,你再加个序数呢

好的,我试一下,谢谢您的建议!

fxf568 commented 2 weeks ago

我使用如下的订阅方式 1122 但是发现后一个订阅主题好像没有订阅成功,无法接收到消息,是什么原因? 3344

这个是我的订阅部分代码 image

nnhy commented 2 weeks ago

这个问题,需要查一下rocketmq资料或者源代码,我没试过一个连接订阅多个topic

fxf568 commented 2 weeks ago

能给一个解决方案吗,找了一圈没有找到可以解决这个问题的开发包,我们对接的是阿里云的rocketmq4.x

这个问题,需要查一下rocketmq资料或者源代码,我没试过一个连接订阅多个topic

nnhy commented 2 weeks ago

最好的方案,就是每个Consumer对象,负责一个Topic,然后共用消费函数