首页 > 解决方案 > Apache Curator DistributedQueue 的 lockPath 是如何工作的?

问题描述

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

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

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

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

标签: javaapache-zookeeperapache-curator

解决方案


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

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

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


推荐阅读