我有一个应用程序,它使用Curator框架来确定领导力。我们希望能够在Zookeeper服务器上测试状态更改,有没有办法做到这一点?
从我们的角度来看,如果我们可以让服务器向连接的客户端发送连接状态(已连接、已重新连接、挂起、丢失),这将是有益的。我知道Curator提供了一个TestingServer类,但它似乎没有这个功能。
任何解决方案或想法都将不胜感激!
发布于 2017-09-06 14:14:02
@Test
public void testConnectionStateListener() throws Exception
{
server.close();
Timing timing = new Timing();
CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(timing.milliseconds()));
try
{
client.start();
final BlockingQueue<ConnectionState> stateVector = Queues.newLinkedBlockingQueue(1);
ConnectionStateListener listener = new ConnectionStateListener()
{
@Override
public void stateChanged(CuratorFramework client, ConnectionState newState)
{
stateVector.offer(newState);
}
};
Timing waitingTiming = timing.forWaiting();
client.getConnectionStateListenable().addListener(listener);
server = new TestingServer(server.getPort());
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.CONNECTED);
server.stop();
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.SUSPENDED);
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.LOST);
server.restart();
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.RECONNECTED);
server.close();
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.SUSPENDED);
Assert.assertEquals(stateVector.poll(waitingTiming.milliseconds(), TimeUnit.MILLISECONDS), ConnectionState.LOST);
}
finally
{
CloseableUtils.closeQuietly(client);
}
}https://stackoverflow.com/questions/29705968
复制相似问题