Java 使用多线程系统在zookeeper上监视多个节点

Java 使用多线程系统在zookeeper上监视多个节点,java,apache-zookeeper,apache-curator,Java,Apache Zookeeper,Apache Curator,我有一个项目,我在几个不同的线程中观察几个节点。现在,我注意到,当我观察一个节点时,它发生了变化,并引发了一个事件,例如,某个节点上名为a的观察会阻止所有其他观察者。因此,只有在A上的观察者完成后,另一个观察者才会返回以观察节点的更改。这意味着,如果一个节点被更改为B,例如当其观察程序被阻止时,只有在a上的观察程序完成后,节点B上的观察程序才会引发事件 此问题导致应用程序速度变慢 所以,为了解决这个问题,我想使用curator为每个线程使用不同的客户端连接,但我已经了解到一个连接就足够了,如果我

我有一个项目,我在几个不同的线程中观察几个节点。现在,我注意到,当我观察一个节点时,它发生了变化,并引发了一个事件,例如,某个节点上名为a的观察会阻止所有其他观察者。因此,只有在A上的观察者完成后,另一个观察者才会返回以观察节点的更改。这意味着,如果一个节点被更改为B,例如当其观察程序被阻止时,只有在a上的观察程序完成后,节点B上的观察程序才会引发事件

此问题导致应用程序速度变慢

所以,为了解决这个问题,我想使用curator为每个线程使用不同的客户端连接,但我已经了解到一个连接就足够了,如果我需要多个连接,那么我的实现就有问题了

1我不明白多重连接zookeeper服务器有什么问题

我的问题还有别的解决办法吗

编辑-更具体的问题

我有一个主机,它接收客户端的请求,每个客户端都可以在我的服务器上保存文件,我们对这个文件进行一些处理,它比听起来更复杂,我不会详细说明,主机在/tasks/中创建了一个节点,让工作人员在没有数据的情况下处理文件。当然,数据在数据库中。当工作人员监视其节点时,他将处理该文件,当他完成时,他将创建一个处于/状态的节点,其中包含其处理已完成的所有文件。 主节点监视节点/状态,当某些内容发生更改时,它会获取子节点,并创建一个线程以加快速度,因为zookeeper监视程序和回调是单线程的,这将释放这些文件,从数据库中删除一些元,向客户机返回响应,删除一些变量等

这是主要的流程之一,但我还有代码的另一个重要部分,它监听节点,并在发生更改时处理它们的子节点

因为这是在一个线程中,我创建了一个已经完成的节点列表,所以我不会多次执行最后的过程,但它比这更复杂,而且该解决方案会导致其他问题,一些并发错误

正如我所问

1对于每个重要的流,多重连接有什么问题,所以我不必在手表和回调中创建线程


2这里还有其他解决方案吗?

没有很好的文档记录,但是ZooKeeper有一个线程来处理观察者和异步回调。我们给馆长写了一份技术备忘录

如果您不知道如何并行接收ZK事件,您可以将所有繁重的代码从侦听器移到后台processing@AdamSkywalker我这样做了,但是我在同一个节点子节点上有几个线程,我需要用变量等同步它们,这样子节点就不会被处理多次。它使代码更加复杂,并导致错误。这就是为什么我想为每个观察者建立一个单一的连接我没有太多的观察者..我知道这个问题。我只想知道我解决这个问题的所有选择。我尝试在监视程序中使用线程,但它会导致其他问题。我想知道使用几个与动物园管理员的连接是否是一个好的解决方案?如果你描述一下你试图实现的目标,我可能会提供帮助。具体如何?我怎样才能与你联系?请描述一下我在问题中已经描述过了。我有几个观察者,在几个线程中,我不想让线程等待一个线程完成他的观察。当我在监视程序中使用线程时,它们只有一行创建线程,而且速度更快,这会导致其他问题,因为我需要正确管理这些线程。。。。