如何处理无序的Zookeeper通知?

问题描述

我在内存队列中运行多个进程。该队列是在Zookeeper中创建/删除的顺序znode的体现。

添加znode时,在所有涉及的进程中,等效项都会添加到队列中。而且,当删除znode时,等效的项也会在每个涉及的进程中从队列中删除。

由于最终应删除所有添加的项,因此希望可以平衡添加和删除信号。

我遇到了这样的情况,一个znode的添加和删除非常迅速,并且在添加通知之前的某个流程中收到了删除通知。因此发生了尝试删除该项目的尝试,但是失败了,因为它实际上并不存在,然后收到了添加信号,该信号添加了该项目,但是从未将其删除。

一个简单的解决方案是在将项目添加到队列后断言等效znode的存在,这对我来说已经足够了,但似乎效率不高。

我的问题是,是否有一种方法可以以更有效的方式或“动物园管理员”的方式来处理这种情况?

解决方法

您正试图将ZooKeeper用作不适合的消息队列。在ZooKeeper中,没有为观察者通知订购任何交付保证。 相反,在这种情况下,您应该使用诸如Kafka或RabbitMQ之类的消息传递系统。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...