RabbitMQ怎样能实现多个队列由一个消费者来接收消息?

笑天居士 2014-03-12 07:57:53
RabbitMQ怎样能实现多个队列由一个消费者来接收消息?

多个队列M,由N个消费者来处理,M>N,这种情况也就是怎样实现多个队列由一个消费者来接收消息

consume这是阻塞读,同一时刻只能阻塞读一个队列的消息,轮旬也不是办法啊

就象Gearman任务分发一样
...全文
4071 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑天居士 2014-05-08
  • 打赏
  • 举报
回复
引用 2 楼 buyejiangshan 的回复:
能说下具体实现方法吗?多线程不是不好管理吗
这个我也请教过别人 1、笨拙点方法,就是轮循,consume的阻塞监听可以设置timeout,通过设置一个较小的timeout,可以轮流监听几个channel,变相实现监听多个queue,对性能要求不是很高,可以使用这种方法 2、还有个办法就是先取出一个队列的消息数,然后循环的都读出后,转去读另一个队列,所有队列如果都没有消息了,就这样循环等待着 3、还有一个专业人士的回答,但是我还没有完全理解: 消费者(consumer)这是个业务层的概念,而消费或者说订阅(也就是 consume)是 AMQP 协议层的东西,所以,你问一个消费者能否订阅多个queue,答案是当然可以。方案也就一种,按照协议的流程分别向不同的 queue 进行 consume。至于是使用多线程方式来处理,还是使用事件驱动的方式(单线程)来处理这就取决于实现了。 如果对多线程控制能力不是很强,建议不要用这种方式,太专业了 4、这个问题后来我仔细想过,也许可以在应用层进行一下重新设计,可以用线程池作为多个consumer只读取出消息,不进行处理,然后publish进另一个队列,然后用由一个consumer来处理消息 希望对你有所帮助
cnhuangxf 2014-05-06
  • 打赏
  • 举报
回复
能说下具体实现方法吗?多线程不是不好管理吗
笑天居士 2014-03-15
  • 打赏
  • 举报
回复
请教了下别人,这种情况只能是利用Topic方式进组合并分发了 要么就建立最详细的多个队列比如1000个,然手consumer利用线程池多线程的监听所有队列

18,777

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧