讀《分布式一致性原理》JAVA用戶端API操作

來源:互聯網
上載者:User

標籤:主程   技術   connect   通知   latch   current   over   執行個體   圖片   

建立會話

用戶端可以通過建立一個Zookeeper執行個體來串連伺服器。4種構造方法如下

ZooKeeper(connectString, sessionTimeout, watcher);ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean canBeReadOnly) ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,long sessionId, byte[] sessionPasswd);ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,long sessionId, byte[] sessionPasswd, boolean canBeReadOnly)

 

 

注意,zookeeper用戶端和服務端會話建立是一個非同步過程,也是就是說在程式中構造zookeeper方法初始化方法執行完後

會立即返回,在大多數情況下此時並沒有真正的建立一個可用的會話,此時會話正處於CONnectioning狀態。當真正的會話建立後

服務端會向用戶端發送一個通知,用戶端在擷取這個通知後會話才真正的建立。

package session;import java.io.IOException;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;public class CreateZookeeper implements Watcher {    private static CountDownLatch connectedSemaphore = new CountDownLatch(1);        @Override    public void process(WatchedEvent event) {        System.out.println("receive watched event:"+event);        if (KeeperState.SyncConnected==event.getState()) {            connectedSemaphore.countDown();        }            }    public static void main(String[] args) throws IOException {        ZooKeeper zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper());                System.out.println(zooKeeper.getState());                try {            connectedSemaphore.await();        } catch (InterruptedException e) {}            System.out.println("zookeeper session established");                    }    }

程式運行結果如下:

CreateZookeeper類實現了Watcher介面重寫了process方法,該方法負責處理來自zookeeper服務端的通知。在

收到來自服務端的synconncted事件後,解除了主程式中的CountDownLatch等待阻塞。至此用戶端工作階段建立完成。

 

 建立一個複用sessionId和sessionPasswd的執行個體
package session;import java.io.IOException;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;public class CreateZookeeper2 implements Watcher {public static CountDownLatch connectedSemaphore = new CountDownLatch(1);@Overridepublic void process(WatchedEvent event) {    System.out.println("receive watched event:"+event);    if (KeeperState.SyncConnected==event.getState()) {        connectedSemaphore.countDown();    }    }public static void main(String[] args) throws IOException, InterruptedException {    ZooKeeper zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper());    connectedSemaphore.await();    long sessionId = zooKeeper.getSessionId();    byte[] sessionPasswd = zooKeeper.getSessionPasswd();        //複用sessionId和sessionPasswd     zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper(),1l,"test".getBytes());          zooKeeper = new ZooKeeper("192.168.64.60", 5000, new CreateZookeeper(),sessionId,sessionPasswd);          Thread.sleep(Integer.MAX_VALUE);}}

我們可以看出,第一次使用錯誤的id和pw服務端返回“EXpired”事件,而第二次使用正確的id和pw則重新串連上。

讀《分布式一致性原理》JAVA用戶端API操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.