问题标签 [apache-curator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
validation - 仅包含“0”字符的策展人锁定路径名称
我是 ZooKeeper 的新手,但在帮助同事调试生产问题时,我们发现了一些相当出乎意料的事情。我们系统中的现有代码使用 Curator InterProcessMutex。该应用程序使用路径创建锁,例如/TEST/ABC
. 然后代码的另一部分使用路径创建更多锁,/TEST/ABC/[some integer]
而整数是通过 UI 输入的一些对象 ID。这已经工作了几个月,直到最近它突然停止工作。
我们进行了线程转储,发现线程在尝试获取带有路径的锁时被阻塞,TEST/ABC
事实证明,每当/TEST/ABC/0000
创建路径时就会发生这种情况(0 的数量无关紧要,只要它只包含零)。显然,某天某个测试人员决定在系统中输入一些虚假 ID,从而导致系统停止运行。我们已经解决了这个问题,但我很好奇是否有人可以解释为什么会这样?
问题:为什么锁定TEST/ABC/0000
与锁定相同TEST/ABC
?
(零的数量实际上并不重要,任何都映射到TEST/ABC
。)
java - 在 Zookeeper 节点上调用 getChildren 时忽略锁定节点
当我在带有 curator 的 Zookeeper 节点上调用 getChildren() 时,有没有办法忽略代表锁的子节点?
我想用一个特定节点的数据读取所有孩子。因此,我首先调用 getChildren() 并遍历返回的 List 并对每个这样的孩子调用 getData()。为了避免孩子们在两者之间发生变化,我首先需要一个 InterProcessMutex。不幸的是,孩子的列表也包含这个互斥体。
有没有更聪明的方法来做到这一点?或者只是忽略锁定节点?
apache-zookeeper - Apache Curator 重新连接后丢失所有手表
我在我的项目中使用 Apache Curator。CuratorFramework 失去与 ZooKeeper 服务器的连接后,它会自动重新连接,但它似乎失去了我设置的所有手表,并且我不再收到任何通知。如果连接没有断开并重新启动,手表会按预期工作。
这是策展人的错误还是我做错了什么?设置手表的代码如下:
谢谢,
java - 具有 Zookeeper 服务发现连接的 Curator 被强制关闭
我正在尝试使用 Curator 和 Zookeeper 进行服务发现。
当我尝试注册我的服务时,会发生以下情况。
相关代码如下:(getDiscovery 方法是导致上述错误的方法)
我在以下情况下使用它:
其中以下是配置
以下是所需curatorFramework的初始化
而jacksonInstanceSerializer如下:
其中 instanceSerializerFactory 是:
注意:实例详细说明我要注册的内容(服务名称和地址等)
java - 找不到策展人服务发现服务
我有两个应用程序,一个将自己注册到 zookeeper 服务,另一个尝试列出已注册的服务。
但是,当我列出它们时,我没有找到任何服务
我正在注册服务如下
当我尝试获得服务时,我有以下内容:
请注意,discovery.queryForNames()
返回一个包含我serviceName
和“动物园管理员”的数组
multithreading - apache curator:锁撤销不起作用
简而言之:我想与一个客户端创建一个锁并与另一个客户端释放它;所以我试图为此使用撤销。它不工作。更多细节(和我的代码)如下。任何帮助表示赞赏!
long:有一个系统,其中一个线程(带有自己的客户端)设置第一个锁(更新),然后第二个线程(带有可能与原始客户端相同或不同的客户端)将设置第二个锁;然后做一些工作,然后释放那个锁,然后释放第一个锁这个代码通过让两个不同的客户端获得锁来模拟两个线程。
但是,第二个客户端无法从第一个客户端撤消锁定。永远不会触发“撤销侦听器”。已经在网上搜索并没有找到示例。此代码假定您在本地主机的端口 2181 上运行了一个 zookeeper 服务器
理想情况下,我还想从其他地方快速查看锁是否到位,但也许超时时间很短(5 毫秒)的获取可以实现这一点。
另外,释放锁后收割锁是个好主意吗?(不堵塞系统?)
谢谢
-吉尔
ps: 也贴在 apache curator user mailing list
如果我有答案,我会交叉发布答案。
从邮件列表中得到了一个答案:Jordan Zimmerman 晚上 8:46(13 小时前)有很多问题:
- 文档对此并不清楚,但必须在获取锁之前调用 makeRevocable() 。请提交 Jira/PR 以修复文档。
- 在您的测试中,Revoker.attemptRevoke 使用了不正确的路径。一定是锁的路径,所以:“Revoker.attemptRevoke(client2, ipMutex.getLockPath());”</li>
- InterProcessMutex 跟踪拥有锁的线程。所以,lock.release(); 在您的撤销程序中将不起作用。我建议改用 InterProcessSemaphoreMutex。
java - How to check programmatically if Zookeeper is running?
I am using CuratorFramework (I'm still a newbie) in order to connect to a Zookeeper instance. I would like to import a configuration but before that I would like to test that my program is able to connect to Zookeeper. So far I have something like that:
I've already started ZooKeeper on my local machine and I checked the connection with zkCli and the client is able to connect to it. The zookeeperCon variable is set to "127.0.0.1:2181" (I tried with localhost:2181 as well). The problem is that the above method always returns false despite the fact that zkServer is up n running. Most probably, the syntax is not correct but I could not find a solution online. Could you please help me with why the above code cannot find the zkServer which is up and running?
apache-zookeeper - Apache Zookeeper 数据持久性。使用 CreateMode.Persistent 创建的节点能否在整个集群重启后继续存在?
我正在使用 CreateMode.Persistent 在 Windows 上使用 apache curator 库创建节点。完全重启集群后,我注意到有时节点存在。在其他时候,他们不是。Zookeeper 是否保证创建的节点在重新启动时保持不变?
apache - 将结果从 Zookeeper 传输到网络服务器
在我的项目中,我正在计算动物园管理员工作人员的大约 10-100mbs 数据。然后我使用 HTTP PUT 将数据从工作进程传输到我的网络服务器,最终传送到客户端。无论如何使用 Zookeeper 或 Curator 来传输该数据,还是我自己将数据从 Worker 进程中取出并转移到我的整体之外的进程中?
apache-zookeeper - 处理来自 ConnectionStateListener 的馆长 SUSPEND 状态的最佳方法
我想问一个关于处理 SUSPEND 状态的问题。
这是背景:
我正在使用 curator/zk 作为并发运行作业列表的任务协调器。每分钟,每个工作人员(每个工作都在单独的 VM 上运行)尝试通过调用从 zk 获取任务(锁):
如果工作获得锁,它将执行任务。
负责检索器锁/任务的类实现 ConnectionStateListener 接口。以下是当前的实现:
RECONNECT:什么都不做,因为无论 ZK 连接状态如何,worker 都会尝试获取锁。
LOST:释放锁,因为连接丢失。
暂停:??????
我的问题是关于 SUSPEND 状态,我应该在进入 SUSPEND 时释放锁(基本上,视为丢失)还是做其他事情?
处理 SUSPEND 状态的最佳实践是什么?
谢谢,