public static void main(String[] args) { final String connectString = "127.0.0.1:2181"; RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, retryPolicy); client.start(); System.out.println("zk operation"); client.close(); }
首先,對於ZooKeeper的鏈接就是建立一個CuratorFramework實例的過程.通常會把CuratorFramework實例的建立交給工廠類CuratorFrameworkFactory,使用工廠方法newClient()方法實例化.
1. connectString參數是ZooKeeper服務的地址和端口號,對於集羣狀況下的多個ZooKeeper示例,之間使用逗號分隔.好比apache
String connectString = "127.0.0.1:2181,127.0.0.2:2181,127.0.0.3:2181";
public static void main(String[] args) { final String connectString = "127.0.0.1:2181"; RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, 3000, 1000, retryPolicy); client.start(); System.out.println("zk operation"); client.close(); }
相比於使用newClient()方法建立鏈接外,還能夠使用builder()方法來控制更多的參數,代碼以下:安全
public static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181") .retryPolicy(retryPolicy).sessionTimeoutMs(1000 * 6).connectionTimeoutMs(1000 * 6).build(); client.start(); System.out.println("zk operation"); client.close(); }
在ZooKeeper官網中,有這樣一句話:session
You only need one CuratorFramework object for each ZooKeeper cluster you are connectingui
這句話告訴咱們在一個應用中,只須要一個ZK實例就足夠了.CuratorFramework實例都是線程安全的,你應該在你的應用中共享同一個CuratorFramework實例.根據ZooKeeper的這個特色,能夠選擇使用單例模式建立一個ZK鏈接:spa
import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.ExponentialBackoffRetry; public class ClientSingleton { private static CuratorFramework client = null; private ClientSingleton() { RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").retryPolicy(retryPolicy) .sessionTimeoutMs(1000 * 6).connectionTimeoutMs(1000 * 6).build(); } public static synchronized CuratorFramework newClient() { if (client == null) { new ClientSingleton(); } return client; } public static void start() { client.start(); } public static void close() { client.close(); } }