サーバ動的に大文字と小文字を飼育係

需要

分散システムは、マスタノードは、プライマリノードサーバをオフラインに知覚することができる動的な、リアルタイムRenyiyitaiクライアントに組立ラインオフにすることができ、1以上を有することができます。

要件分析

 

 

実現

クラスタノード上で/サーバーを作成します。

作成/サーバ「サーバ」

一部には依存しています

pom.xml:

<プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0"のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance"のxsi:schemaLocationの= "のhttp:/ /maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> 
  <modelVersion> 4.0.0 </ modelVersion> 
  <groupIdを> com.mcq < /のgroupId> 
  <たartifactId> zookeeper1026 </たartifactId> 
  <バージョン> 0.0.1-SNAPSHOT </バージョン> 
  <依存性> 
		<依存性> 
			<のgroupId> JUnitの</のgroupId> 
			<たartifactId> JUnitの</たartifactId> 
			<バージョン> RELEASE < /バージョン> 
		</依存関係> 
		<依存> 
			<groupIdを> org.apache.logging.log4j </ groupIdを>
			<たartifactId> log4jのコア</たartifactId> 
			<バージョン> 2.8.2 </バージョン> 
		</依存>
		<! - https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper - > 
		<依存> 
			<groupIdを> org.apache.zookeeper </ groupIdを> 
			<たartifactId>飼育係</たartifactId> 
			<バージョン> 3.4.10 </バージョン> 
		</依存関係> 
</依存関係> 
</プロジェクト>

 SRC /メイン/リソースのファイルlog4j.propertiesを追加します。

log4j.rootLogger = INFO、STDOUT   
log4j.appender.stdout = org.apache.log4j.ConsoleAppender   
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout   
log4j.appender.stdout.layout.ConversionPattern =%D%Pは[ %のC] - %M%N   
log4j.appender.logfile = org.apache.log4j.FileAppender   
log4j.appender.logfile.File =目標/ spring.log   
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout   
のlog4j .appender.logfile.layout.ConversionPattern =%d個の%のP [%のC] - %のm個の%nを

 

飼育係を登録するには、サーバー側のコード

パッケージcom.mcq.zookeeper1026。

インポートにjava.io.IOException; 

輸入org.apache.zookeeper.CreateMode。
輸入org.apache.zookeeper.KeeperException。
輸入org.apache.zookeeper.WatchedEvent。
輸入org.apache.zookeeper.Watcher; 
輸入org.apache.zookeeper.ZooDefs.Ids。
輸入org.apache.zookeeper.ZooKeeper; 

パブリッククラスDistributeServer { 
	プライベート文字列のconnectString = "hadoop103:2181、hadoop104:2181、hadoop105:2181"; 
	プライベートint型SESSIONTIMEOUT = 2000; 
	民間のZooKeeper ZK = NULL; 
	プライベート文字列のparentNode = "/サーバ"; 

	公共ボイドgetConnect()のIOException {スロー
		ZK =新規のZooKeeper(のconnectString、SESSIONTIMEOUT、新しいウォッチャーを(){
 
			@Overrideを
			公共ボイドプロセス(WatchedEventイベント){ 
				// TODO自動生成方法スタブ

			} 

		})。
	} 

	//注册服务器
	公共ボイドregistServer(文字列のホスト名)が例外{スロー
		するSystem.out.println(ZK)を、
		文字列パス= zk.create(のparentNode + "/サーバ"、hostname.getBytes()、Ids.OPEN_ACL_UNSAFE、
				CreateMode.EPHEMERAL_SEQUENTIAL)。
		System.out.println(ホスト名+ "がオンラインになっている" +パス); 
	} 

	//业务功能
	ます。public voidビジネス(文字列のホスト名)InterruptedExceptionある{スロー
		するSystem.out.println(+ホスト名"働いているの......"); 
		Thread.sleep(はLong.MAX_VALUE)。
	} 
 
	公共の静的な無効メイン(文字列[] argsが){例外をスロー
		// 1.获取ZK连接
		=新しい新しいDistributeServerサーバーDistributeServer(); 
		server.getConnect(); 
		// 2.登録サーバー接続情報ZKの使用
		server.registServerを(引数[0]); 
		//サービス機能を起動3. 
		server.business(引数[0]) ; 

	} 
}

 

クライアントコード

com.mcq.zookeeper1026パッケージ; 

インポートにjava.io.IOException; 
java.util.ArrayListののインポート、
インポートはjava.util.List; 

インポートorg.apache.zookeeper.KeeperException; 
インポートorg.apache.zookeeper.WatchedEvent; 
インポートorg.apache .zookeeper.Watcher; 
インポートorg.apache.zookeeper.ZooKeeper; 

パブリッククラスDistributeClient { 
	公共の静的な無効メイン(文字列[]引数)はIOExceptionが、KeeperException、{InterruptedExceptionあるスロー
		。ZK //接続を取得1。
		DistributeClientクライアント=新しいDistributeClient()。
		client.getConnect(); 
		// 2のリスト取得し、そこから情報サーバ、サーバ情報の子ノードの取得
		client.getServerListを(); 
		// 3つのビジネスプロセスが開始さ
		client.businessを(); 
	}

	空ビジネスプライベート()InterruptedExceptionあるスロー{ 
		// TODO自動生成されたスタブメソッド
		のSystem.out.println( "クライアントワーキング...... ISを"); 
		(はLong.MAX_VALUEの)のThread.sleep; 
	} 

	プライベートのparentNode文字列= "/サーバー"。

	空getServerListプライベートは()KeeperException、InterruptedExceptionある{スロー
		// TODO自動生成されたメソッドスタブ
		//子ノードを1が親ノードとリスニングのサーバ情報を取得する。。
		リスト(trueにはparentNode、)<文字列> = zk.getChildren子供; 
		/ 。/ 2ストレージサーバ情報リスト
		のArrayList <ストリング> =新しい新しいサーバのArrayList <>(); 
		//すべてのノードをトラバース3、ノードを取得したホスト名情報。。 文字列子供:子供)のために{ 
			バイト[] =データZK。 getData(ヌル、falseにはparentNode + "/" +子供、); 
			servers.add(新しい新しい文字列(データ));
		}
		。// 4打印服务器列表信息
		のSystem.out.println(サーバ)。
	} 

	プライベートZooKeeperのZK = NULL; 
	プライベート文字列のconnectString = "hadoop103:2181、hadoop104:2181、hadoop105:2181"; 
	プライベートint型SESSIONTIMEOUT = 2000; 

	民間のボイドgetConnectは()スローにIOException { 
		// TODO自動生成されたメソッドスタブ
		//创建到ZK的客户端连接
		ZK =新しいのZooKeeper(のconnectString、SESSIONTIMEOUT、新しいウォッチャー(){ 

			@Override 
			ます。public voidプロセス(WatchedEventイベント){ 
				/ / TODO自動生成方法スタブ
				試み{ 
					getServerList(); 
				}キャッチ(例外e){ 
					e.printStackTrace(); 
				} 
			} 
			
		})。
	} 
}

 

プログラムを実行します。

クライアントを実行するには

xshellクライアント(ビン/ zkCli.sh)にログインし、いくつかの操作は、あなたは、ノードリアルタイムで日食のコンソール出力を見ることができます。

 

そして、例えば、hadoop103に設定し、その後、クライアントコンソールを実行した後、現在のノードが表示されます実行コンフィギュレーションに次のパラメータを設定するために覚えて、サーバーを実行します。

 

 赤いボックスの上の点は、コンソールを切り替えます。

 

おすすめ

転載: www.cnblogs.com/mcq1999/p/11743939.html