2013-07-18 46 views
6

在我的应用程序中,我有一个可能变得非常大的队列。 如果我发现机器上没有更多空间会怎么样? 如何在多台机器上拆分我的队列? 也许RabbitMQ的哲学是不同的,我应该创建多个队列而不是一个大队列。RabbitMQ队列设计和缩放

最佳, 弗拉维奥

回答

1

RabbimMQ提供clusteringhigh availability features开箱的,你就必须将它们配置您的需求。

实际上,AMQP可以容纳任何大小的消息,但是在大多数情况下,我猜,99%的消息只有32Kb。您可以计算估计的资源使用情况(最小/最大/平均值),并进一步做出决定是否集群。

+2

从我的理解队列不能在不同的机器之间进行分裂,单个队列的单个节点(所以单个队列无法形成规模仅居这么多)..我错了吗? – user2539645

+0

没错,排队在单个节点上(但可以镜像到另一个节点上)。什么是你的信息估计大小和流量? – pinepain

+0

实际上是在接下来的日子里会被评估的东西..我预计TB的数据会在几个小时内到达,所以我应该期待一个非常沉重的系统..也许更好的解决方案可能是创建一个新的交换,而不是队列,并随着负载增长添加更多的队列(对群集要求)。您认为如何? 问题是:交换是否在节点上均匀创建新的队列(如循环赛)? – user2539645

1

正如你可以阅读RabbitMQ邮件列表线程http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html,我想到的解决方案是实现竞争消费者模式(队列上的许多消费者),当检测到特殊消息(停止标志打开)发送STOP给主题交换的消息。

该“停止”消息由“主”消费者接收,该消息开始轮询Zookeeper(通过策展人),直到Ceratain zkNode的所有孩子都被删除(在此情况下使用Zookpeer作为队列消费者的注册表)。当所有消费者完成其停止阶段时,“主”消费者执行一些任务并重新启用原始队列消费者向主题交换(其中每个消费者使用专用队列正在侦听)发送RESTART消息。

我希望这能帮助(或“激励”)别人..