Org.Apache.zookeeper.server.quorum.QuorumPeerMain.main()の呼び出しが機能していません。
ZooKeeper
を開始するには、ZooKeeperServerMain
クラスを実行する必要があります。
次のコードを使用して、ZooKeeper
を埋め込みモードで開始できます。
Properties startupProperties = ...
QuorumPeerConfig quorumConfiguration = new QuorumPeerConfig();
try {
quorumConfiguration.parseProperties(startupProperties);
} catch(Exception e) {
throw new RuntimeException(e);
}
zooKeeperServer = new ZooKeeperServerMain();
final ServerConfig configuration = new ServerConfig();
configuration.readFrom(quorumConfiguration);
new Thread() {
public void run() {
try {
zooKeeperServer.runFromConfig(configuration);
} catch (IOException e) {
log.error("ZooKeeper Failed", e);
}
}
}.start();
Netfix opensourced Curator Zookeeperをさらに便利に使用するためのフレームワーク。テストサーバークラスが組み込まれています。このtest依存関係をプロジェクト記述子に追加するだけです(maven、gradleなど)。
org.Apache.curator:curator-framework:4.0.1
org.Apache.curator:curator-test:4.0.1
そして、ここにテストの要点があります。
TestingServer zkTestServer;
CuratorFramework cli;
@Before
public void startZookeeper() throws Exception {
zkTestServer = new TestingServer(2181);
cli = CuratorFrameworkFactory.newClient(zkTestServer.getConnectString(), new RetryOneTime(2000));
cli.start();
}
@After
public void stopZookeeper() throws IOException {
cli.close();
zkTestServer.stop();
}
cli
を使用すると、テストデータを簡単に作成できます(curator-framework
依存関係)。
cli.create()
.creatingParentsIfNeeded()
.forPath("/a1", "testvalue".getBytes("UTF-8"));
このようなものを使用できます。
_int clientPort = 21818; // none-standard
int numConnections = 5000;
int tickTime = 2000;
String dataDirectory = System.getProperty("Java.io.tmpdir");
File dir = new File(dataDirectory, "zookeeper").getAbsoluteFile();
ZooKeeperServer server = new ZooKeeperServer(dir, dir, tickTime);
NIOServerCnxn.Factory standaloneServerFactory = new NIOServerCnxn.Factory(new InetSocketAddress(clientPort), numConnections);
standaloneServerFactory.startup(server); // start the server.
_
シャットダウンするにはstandaloneServerFactory.shutdown()
を呼び出すだけです
一時ポート(zkPort
で表示)の使用を追加して 1 の答えを基に構築し、最新のZK API用に更新しました。
int tickTime = 2000;
int numConnections = 5000;
String dataDirectory = System.getProperty("Java.io.tmpdir");
File dir = new File(dataDirectory, "zookeeper").getAbsoluteFile();
ZooKeeperServer server = new ZooKeeperServer(dir, dir, tickTime);
standaloneServerFactory = ServerCnxnFactory.createFactory(0, numConnections);
int zkPort = standaloneServerFactory.getLocalPort();
standaloneServerFactory.startup(server);
ServerConfig config = new ServerConfig();
config.parse(new String[] {port, dir});
ZooKeeperServerMain zk = new ZooKeeperServerMain();
zk.runFromConfig(config);
GeoffBourneの回答の更新バージョン。
int clientPort = 2199; // not standard
int numConnections = 5000;
int tickTime = 2000;
String dataDirectory = System.getProperty("Java.io.tmpdir");
File dir = new File(dataDirectory, "zookeeper").getAbsoluteFile();
ZooKeeperServer server = new ZooKeeperServer(dir, dir, tickTime);
ServerCnxnFactory factory = new NIOServerCnxnFactory();
factory.configure(new InetSocketAddress(clientPort), numConnections);
factory.startup(server); // start the server.
// ...shutdown some time later
factory.shutdown();