Apache Curator DistributedQueue 的 lockPath 是如何工作的?

How does Apache Curator DistributedQueue's lockPath work?

我有一堆独立的工作需要进程来执行。这些工作可以按任何顺序执行,并且它们持续的时间足够长,以至于在执行工作时进程有时会失败。

我需要协调这些工作的分配,而Curator的DistributedQueue似乎几乎就是我想要的。不过,我不需要它提供的排序,所以我很好奇假设我拒绝拥有一个消费者(即每个进程只从队列中消费),我为此支付的开销是多少。

我主要关心的是队列生成器上的 lockPath() 函数实际如何工作。我需要它提供的功能,因为流程有可能失败,我不需要放弃他们应该做的工作。但我不希望一次只有一个进程能够完成任何工作。如果我使用 lockPath(),当一个进程正在使用消息时队列是否会阻塞其他进程?

此外,如果队列看起来是一种不合理的方法,是否有其他工具可以实现我想要的,或者我是否必须自己动手?我想留在 Curator / ZK 环境中,但对其中的替代方案持开放态度。

(注:我是Apache Curator的主要作者)

文档需要改进。该锁用于使队列条目可重试。即,在消费者完成之前,队列中的条目不会被删除。该锁确保只有 1 个进程在对条目进行操作。如果您不关心在失败时删除队列条目,则不需要使用锁。但是,无论有没有锁,您 运行 处理队列条目的每个消费者。所以,如果你想并发处理队列,你会 运行 多个消费者(在同一个 JVM 或不同的 JVM 中 - 这无关紧要)。

这是我编写的一个工作流引擎,它使用 Curator 队列来执行分布式工作。随意使用它,因为它是开源的:http://nirmataoss.github.io/workflow/