有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多线程系统在zookeeper上监视多个节点

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

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

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

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

2)我的问题还有其他解决方案吗

编辑-更具体地了解问题

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

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

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

正如我所问

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

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


共 (0) 个答案