Zookeeper學習筆記(三)Master選舉

Curator是一個非常流行的Zookeeper開源客戶端,是Netflix公司開源的一套ZooKeeper客戶端框架,作者是Jordan Zimmerman。它解決了很多ZooKeeper客戶端非常底層的細節開發工作,包括連接重連、反覆註冊Watcher和NodeExistsException異常等,目前已經成爲Apache的頂級項目,是全世界範圍內使用最廣泛的ZooKeeper客戶端之一。

在分佈式系統中,經常會遇到這樣的場景:對於一個複雜的任務,僅需要從集羣中選舉出一臺進行處理即可。諸如此類的分佈式問題,我們統稱爲“Master選舉”。

以上內容摘抄自《從PAXOS到ZOOKEEPER分佈式一致性原理與實踐》

這本書上有一個Master選舉的代碼示例,但我覺得沒有這篇博客上http://blog.csdn.net/wo541075754/article/details/70216046  寫的好,摘抄如下:

public class RecipesMasterSelect {

	private static final String PATH = "/demo/leader";

	public static void main(String[] args) {

		List<LeaderSelector> selectors = new ArrayList<>();
		List<CuratorFramework> clients = new ArrayList<>();
		try {
			for (int i = 0; i < 10; i++) {
				CuratorFramework client = getClient();
				clients.add(client);

				final String name = "client#" + i;
				LeaderSelector leaderSelector = new LeaderSelector(client, PATH, new LeaderSelectorListener() {
					@Override
					public void takeLeadership(CuratorFramework client) throws Exception {
						System.out.println(name + ":I am leader.");
						Thread.sleep(2000);
					}

					@Override
					public void stateChanged(CuratorFramework client, ConnectionState newState) {

					}
				});

				leaderSelector.autoRequeue();
				leaderSelector.start();
				selectors.add(leaderSelector);

			}
			Thread.sleep(Integer.MAX_VALUE);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			for(CuratorFramework client : clients){
				CloseableUtils.closeQuietly(client);
			}

			for(LeaderSelector selector : selectors){
				CloseableUtils.closeQuietly(selector);
			}

		}
	}

	private static CuratorFramework getClient() {
		RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
		CuratorFramework client = CuratorFrameworkFactory.builder()
				.connectString("127.0.0.1:2181")
				.retryPolicy(retryPolicy)
				.sessionTimeoutMs(6000)
				.connectionTimeoutMs(3000)
				.namespace("demo")
				.build();
		client.start();
		return client;
	}
}

我引入的版本是:

<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>4.0.0</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-recipes</artifactId>
			<version>4.0.0</version>
		</dependency>

控制檯上將會打印出選舉結果,太簡單方便了哈:

client#8:I am leader.
client#1:I am leader.
client#2:I am leader.
client#0:I am leader.
client#7:I am leader.
client#6:I am leader.
client#3:I am leader.
client#4:I am leader.
client#9:I am leader.
client#5:I am leader.
client#8:I am leader.
client#1:I am leader.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章