- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个针对 Zookeeper 服务器 (v3.7.0) 运行的 CuratorFramework
客户端 (v5.1.0)。如果Zookeeper 服务器在客户端连接到它时关闭我可以看到连接状态(使用 ConnectionStateListener
)SUSPENDED
,然后是 LOST
,然后仅此而已当服务器重新联机时。
这感觉像是一个非常标准的用例,我一定错过了一些愚蠢的东西,但我永远不能一旦服务器在线,让客户端再次连接。
我进行了一些谷歌搜索,但没有发现关于如何处理丢失状态后的恢复的有用信息。
我有一个 self-contained example我在做什么中的示例代码 CuratorRecoveryTest类(class)(在 IDE 而不是 Maven 中运行)。它的主要内容是(从测试类中提取):
// setup the server and client
server = new TestingServer();
client = newClient(server.getConnectString(), 60000, 15000, new RetryNTimes(1, 250));
client.start();
client.blockUntilConnected();
// add the listener
final var stateListener = new StateListener();
stateListener.stateChanged(client, CONNECTED);
// register the listener
client.getConnectionStateListenable().addListener(stateListener);
// verify connection
assertTrue(client.getZookeeperClient().isConnected());
// let things settle
nap(3, "initial settling");
// stop zk
stopServer();
log.info(">>>>>>>>>> STOPPED ZK SERVER");
// let it bake
nap(3, "letting things bake");
// ensure disconnected
assertFalse(client.getZookeeperClient().isConnected());
nap(3, "disconnecting");
// start zk
server.start();
log.info(">>>>>>>>>> STARTED ZK SERVER");
await().atMost(5, MINUTES).until(() -> stateListener.getCurrentState() == CONNECTED || stateListener.getCurrentState() == RECONNECTED);
// NOTE: it never gets here - no state changes after LOST
assertTrue(client.getZookeeperClient().isConnected());
运行时我得到以下输出:
[Thread-0] INFO org.apache.curator.test.TestingZooKeeperMain - Starting server
[Thread-0] WARN org.apache.zookeeper.server.ServerCnxnFactory - maxCnxns is not configured, using default value 0.
[main] INFO org.apache.curator.framework.imps.CuratorFrameworkImpl - Starting
[main] INFO org.apache.curator.framework.imps.CuratorFrameworkImpl - Default schema
[main] WARN demo.CuratorRecoveryTest - CONNECTION-STATE-CHANGE: null --> CONNECTED
[main] DEBUG demo.CuratorRecoveryTest - Taking a 3s nap for initial settling...
[main] DEBUG demo.CuratorRecoveryTest - Done napping for initial settling...
[Curator-ConnectionStateManager-0] WARN demo.CuratorRecoveryTest - CONNECTION-STATE-CHANGE: CONNECTED --> SUSPENDED
[main] INFO demo.CuratorRecoveryTest - >>>>>>>>>> STOPPED ZK SERVER
[main] DEBUG demo.CuratorRecoveryTest - Taking a 3s nap for letting things bake...
[main] DEBUG demo.CuratorRecoveryTest - Done napping for letting things bake...
[main] DEBUG demo.CuratorRecoveryTest - Taking a 3s nap for disconnecting...
[main] DEBUG demo.CuratorRecoveryTest - Done napping for disconnecting...
[main] INFO demo.CuratorRecoveryTest - >>>>>>>>>> STARTED ZK SERVER
[Curator-ConnectionStateManager-0] WARN org.apache.curator.framework.state.ConnectionStateManager - Session timeout has elapsed while SUSPENDED. Injecting a session expiration. Elapsed ms: 20009. Adjusted session timeout ms: 20000
[main-EventThread] WARN org.apache.curator.ConnectionState - Session expired event received
[Curator-ConnectionStateManager-0] WARN demo.CuratorRecoveryTest - CONNECTION-STATE-CHANGE: SUSPENDED --> LOST
当等待条件从未发生时,它就会失败。
NOTE: This happens on an older version combination of Curator and Zookeeper as well, so this is not a "bleeding edge" issue.
我错过了什么?
最佳答案
我有一个类似的问题,并得出结论,当 zookeeper 服务器重新启动时,馆长似乎重用了过时的 IP。
this ticket 中概述的方法为我工作。特别是,this commit它添加了一个自定义的 ZookeeperFactory
,它不会重用以前的过时 IP,而是使用原始的未解析的主机名。
简而言之,在创建策展人时,分配一个自定义的 ZookeeperFactory
CuratorFramework zkClient = CuratorFrameworkFactory
.builder()
...
.zookeeperFactory(new ZKClientFactory())
ZKClientFactory
从缓存的 connectString
创建一个新的 Zookeeper
。
关于java - 为什么当 zookeeper 重新上线时 curator 没有恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68215630/
有没有一种方法可以让我使用 Curator 来观察领导层的变化?当领导者改变时,我需要所有的追随者都知道这已经发生了,这样他们才能发现新的领导者是谁。追随者想知道领导者是谁,这似乎是一种标准,但我无法
给CuratorFrameworkFactory#newClient的连接字符串如何看起来像?到目前为止,我还没有在网上找到任何信息,JavaDoc 也没有告诉我正确的格式。 最佳答案 根据 this
本文整理了Java中org.apache.flink.shaded.curator.org.apache.curator.utils.ZKPaths类的一些代码示例,展示了ZKPaths类的具体用法。
本文整理了Java中org.apache.flink.shaded.curator.org.apache.curator.utils.ZKPaths.getNodeFromPath()方法的一些代码示
本文整理了Java中org.apache.flink.shaded.curator.org.apache.curator.utils.ZKPaths.deleteChildren()方法的一些代码示例
我正在尝试来自策展人的基本代码 http://curator.readthedocs.io/en/4.0/examples.html 我尝试 import elasticsearch import c
只是想知道是否有任何 API 可以使用 Curator Framework 中的 CuratorFramework 类来知道特定节点是领导者。我正在使用 LeaderLatch,但即使 Node 是领
Apache Curator library for ZooKeeper 使用了一个很好的“流畅”语法。例如,要修改事务中的多个节点,代码如下所示: client.inTransaction().
我正在尝试使用CLI探索Elasticsearch策展人 https://www.elastic.co/guide/en/elasticsearch/client/curator/current/in
使用Elasticsearch策展人,如何删除与模式匹配的所有索引,但最新的除外? 我尝试使用filtertype: age,但似乎无法满足我的需要。 最佳答案 您需要两个过滤器:pattern(以匹
我想删除超过 7 天的 Elasticsearch 索引。所以我安装了curator 4.2,因为我的elasticsearch版本是5.0.0(4.x之前的curator版本与elasticsear
场景: 使用Curator实现分布式互斥体。如果已经获取互斥量的客户端由于网络故障而与 zk 服务器断开连接,则 Curator 将尝试重新连接。假设最终重连成功,但是最后一个 session 已经过
我创建了一个 Curator 客户端,如下所示: RetryPolicy retryPolicy = new RetryNTimes(3, 1000); CuratorFramewor
创建路径时,我在以下代码中收到 NodeExists 错误。 CuratorTransaction transaction = curatorFramework.inTransaction(); tr
我已将 Curator 设置为通过此过滤器删除旧的 Elasticsearch 索引: (...) filters: - filtertype: pattern kind: regex val
我正在尝试测试 Apache Curator 中的可撤销锁定。我有两个尝试获取锁的线程。如果第一个测试获取了锁,第二个线程可以要求第一个线程释放锁,以便第二个线程可以获取它 Retry
我目前正在使用 Apache Curator 来外部化共享资源(数据库中的一行)的锁定。总结一下这个问题,我正在运行一个服务的 2 个实例(使用 Spring Boot),我们将其称为服务 A,并调用
我知道 Apache Curator 可以实现基于 zookeeper 的分布式锁功能。根据 Apache Curator 官方网站上发布的文档,它看起来非常容易使用。例如: RetryPolicy
本文整理了Java中org.apache.curator.utils.ZKPaths类的一些代码示例,展示了ZKPaths类的具体用法。这些代码示例主要来源于Github/Stackoverflow/
本文整理了Java中com.bazaarvoice.curator.dropwizard.ZooKeeperConfiguration类的一些代码示例,展示了ZooKeeperConfiguratio
我是一名优秀的程序员,十分优秀!