インストールの成功 1. インストールが正常に完了すると、Zookeeper の BIN ディレクトリに対応する起動スクリプトがあります
サーバーの起動
./zkserver.sh start
クライアントを起動します: (*注意: CLI が必要ですjava))
wath($ i、$ type、$ key){
"Insider watchern"($ this、 'watcher'));} $zoo = new ZookeeperDemo( '127.0.0.1:2181' );
$zoo->get( '/test' ,
array($zoo, 'watcher' ) ); while (
true) {
echo'.' ;
sleep(2) }
リーダーとワーカーのタスク 分布:
クラス
労働者拡張
動物園飼育員 {
const CONTAINER = '/cluster'
protected $acl = array (
; ;
プライベート
$znode
パブリック関数
__construct ( $host = '' 、 $watcher_cb =null 、 $recv_timeout = 10000 ) { parent
:: __construct( $host, $watcher_cb, $recv_timeout );}
public function
register() {
if
( ! $this->exists(
自分:: CONTAINER ) ) { $this->create ( self :: CONTAINER ,
null, $this-> acl ) }
$this->znode = $this ->create(
self::CONTAINER . '/ w-' ,
null ,
$this->acl、
動物園の飼育員:: 一時的な | Zookeeper::SEQUENCE );
$this-> znode = str_replace( self :: CONTAINER . '/' , '' , $this-> znode );
printf( "私は次のように登録されています: %sn" , $this-> znode );
$watching = $this->watchPrevious();
if ( $watching == $this-> znode ) {
printf( "ここには誰もいません、私がリーダーです" );
$this->setLeader( true );
}
else {
printf( "%sn を見ています" , $watching );
}
}
public function watchPrevious() {
$workers = $this->getChildren( self :: CONTAINER );
sort( $workers );
$size = sizeof( $workers );
for ( $i = 0 ; $i < $size ; $i++ ) {
if ( $this-> znode == $workers[ $i ] ) {
if ( $i > 0 ) {
$this->get( self :: CONTAINER . '/' . $workers[ $i - 1 ], array ( $this, 'watchNode' ) );
return $workers[ $i - 1 ];
}
return $workers[ $i ];
}
}
throw new Exception( sprintf( "何か問題が発生しました! 自分自身を見つけることができません: %s/%s" ,
self :: コンテナ ,
$これ-> znode ) );
}
public function watchNode( $i, $type, $name ) {
$watching = $this->watchPrevious();
if ( $watching == $this-> znode ) {
printf( "私が新しいリーダーです!n" );
$this->setLeader( true );
}
else {
printf( "今、%sn を見ています" , $watching );
}
}
public function isLeader() {
return $this-> リーダーです;
}
public function setLeader($flag) {
$this-> isLeader = $flag;
}
public function run() {
$this->register();
while ( true ) {
if ( $this->isLeader() ) {
$this-> doLeaderJob();
}
else {
$this->doWorkerJob();
}
sleep( 2 );
}
}
public function doLeaderJob() {
echo "Leadingn" ;
}
public function doWorkerJob() {
echo "Workingn" ;
}
}
$worker = new Worker( '127.0.0.1:2181' );
$worker->run();
3 つの php プロセスを実行でき、スクリプトの実行を確認できます。