java多线程系统在zookeeper上监视多个节点
我有一个项目,我在几个不同的线程中观察几个节点。现在,我注意到,当我观察一个节点时,它发生了变化,引发了一个事件,某个节点上的观察(例如称为a)会阻止所有其他观察者。因此,只有在A上的观察者完成后,另一个观察者才会返回以观察节点的变化。也就是说,如果一个节点在其观察程序被阻止时发生了更改(例如称为B),则只有在a上的观察程序完成后,节点B上的观察程序才会引发该事件
此问题会导致应用程序速度变慢
所以,为了解决这个问题,我想为每个线程使用不同的客户端连接(使用curator),但我已经读到一个连接就足够了,如果我需要多个连接,我的实现中有一些问题
1)我不明白多重连接zookeeper服务器有什么问题
2)我的问题还有其他解决方案吗
编辑-更具体地了解问题
我有一个主机,它可以从客户端获取请求(每个客户端都可以在我的服务器上保存文件,我们对这个文件进行一些处理,它比听起来更复杂,我不会详细说明),主机在/tasks/中创建一个节点,供工作人员处理该文件(当然,没有它的数据,数据在数据库中)。当工作人员监视他的节点时,他处理文件,当他完成时,他在/status中创建一个节点(其中包含其处理已完成的所有文件)。 主节点监视节点/状态,当某些内容发生更改时,它会获取子节点,并创建一个线程(为了加快速度,因为zookeeper监视程序和回调是单线程的),该线程将释放这些文件(从数据库中删除一些元,向客户端返回响应,删除一些变量等)
这是主要的流程之一,但我还有代码的另一个重要部分,它监听节点,并在发生更改时处理它们的子节点
因为这是在一个线程中,我创建了一个已经完成的节点列表,所以我不会多次执行最后的过程,但它比这更复杂,而且该解决方案会导致其他问题,一些并发错误
正如我所问
1)对于每个重要的流,多个连接有什么问题,所以我不必在手表和回调中创建线程
2)这里还有其他解决方案吗
共 (0) 个答案