在我的应用程序中,我有一个可能会变得非常大的队列。 如果我发现机器上没有更多空间怎么办? 如何在多台计算机上拆分队列? 也许RabbitMQ哲学是不同的,我应该创建多个队列而不是一个大队列..?
最佳, 弗拉维奥
答案 0 :(得分:1)
RabbimMQ提供开箱即用的clustering和high availability features,您只需根据需要对其进行配置。
实际上,AMQP可以保存任何大小的消息,但在大多数情况下,消息只有99%的消息高达32Kb。您可以计算估计资源使用情况(最小值/最大值/平均值),并做出进一步的决策集群或不集群。
答案 1 :(得分:1)
正如您可以阅读RabbitMQ邮件列表线程http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html,我提出的解决方案是实现竞争的消费者模式(队列中的许多消费者),当检测到特殊消息时(打开停止标志)向主题交换发送STOP消息。
这个停止消息由该队列的“主”消费者接收,该队列开始轮询Zookeeper(通过策展人),直到删除了一个ceratain zkNode的所有子节点(在这种情况下使用Zookpeer作为队列消费者的注册表) 。当所有消费者完成停止阶段后,“主”消费者执行某项任务并重新启用原始队列消费者向主题交换发送RESTART消息(每个消费者正在使用专用队列监听)。
我希望这可以帮助(或“激励”)别人......