情景: 我们有多个地理位置分布的节点,我们希望队列收集该位置的消息。然后我们希望将收集到的数据从每个节点中的每个队列发送到中心位置的相应队列。在中心节点,我们将提取队列中收集的数据(来自其他节点),处理它并持久存储它。
约束:
我们的解决方案 我们已经考虑了几个解决方案,其中我将列出我们认为最好的解决方案。一种可能的解决方案(我们认为)是使用Redis来维护各处的队列,因为Redis提供持久存储。然后可能在所有地理上分离的节点上运行一个守护进程,该守护进程从队列中读取数据并将其发送到中央节点。接收数据的中心节点向它接收数据的节点发送ACK(因为数据对我们非常重要),然后在接收到ACK时,节点从队列中删除数据。当然,必须有超时期限才能收到ACK。
问题 上述解决方案(根据我们)将工作正常,但问题是我们不想自己实现整个同步协议,原因很简单,我们可能在这里错了。我们无法在Redis中找到这种特殊的同步方式。因此我们对其他基于AMQP的队列开放,如RabbitMQ,ZeroMQ等。我们再次无法弄清楚我们是否可以使用这些解决方案来实现这一目标。
答案 0 :(得分:4)
您可以通过将中心节点(或节点集群)设置为来自其他节点的消息的消费者,并使用消息确认功能,对RabbitMQ执行此操作。此功能意味着中央节点可以进行交付,以便其他节点仅在确认后删除消息。例如,请参阅:http://www.rabbitmq.com/tutorials/tutorial-two-python.html
如果您还有其他问题,请发送邮件至rabbitmq-discuss。