中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

zookeeper中如何實現事件監聽Watcher

發布時間:2021-11-24 09:29:22 來源:億速云 閱讀:206 作者:小新 欄目:編程語言

小編給大家分享一下zookeeper中如何實現事件監聽Watcher,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Watcher是zookeeper的事件監聽機制,今天我們來看看Watcher類的代碼都包含了什么內容?

Watcher

Watcher是一個接口,定義了process方法,需要子類實現。其代表了實現Watcher接口時必須實現的的方法,即定義進行處理,WatchedEvent表示觀察的事件。

abstract public void process(WatchedEvent event);

內部類

1、Event接口

表示事件代表的狀態,其包含了KeeperState和EventType兩個內部枚舉類。

KeeperState

KeeperState是一個枚舉類,其定義了在事件發生時Zookeeper所處的各種狀態,其還定義了一個從整型值返回對應狀態的方法fromInt。

@InterfaceAudience.Public
    public interface Event {
        /**
         * Enumeration of states the ZooKeeper may be at the event
         */
        @InterfaceAudience.Public
        public enum KeeperState {
            /** Unused, this state is never generated by the server */
            //未知狀態,服務器不再產生此狀態
            @Deprecated
            Unknown (-1),

            /** The client is in the disconnected state - it is not connected
             * to any server in the ensemble. */
            //斷開
            Disconnected (0),

            /** Unused, this state is never generated by the server */
            //未同步連接,不再使用,服務器不會產生此狀態
            @Deprecated
            NoSyncConnected (1),

            /** The client is in the connected state - it is connected
             * to a server in the ensemble (one of the servers specified
             * in the host connection parameter during ZooKeeper client
             * creation). */
            //同步連接狀態
            SyncConnected (3),

            /**
             * Auth failed state
             */
            //認證失敗狀態
            AuthFailed (4),

            /**
             * The client is connected to a read-only server, that is the
             * server which is not currently connected to the majority.
             * The only operations allowed after receiving this state is
             * read operations.
             * This state is generated for read-only clients only since
             * read/write clients aren't allowed to connect to r/o servers.
             */
            //只讀連接狀態
            ConnectedReadOnly (5),

            /**
              * SaslAuthenticated: used to notify clients that they are SASL-authenticated,
              * so that they can perform Zookeeper actions with their SASL-authorized permissions.
              */
            //SASL認證通過狀態
            SaslAuthenticated(6),

            /** The serving cluster has expired this session. The ZooKeeper
             * client connection (the session) is no longer valid. You must
             * create a new client connection (instantiate a new ZooKeeper
             * instance) if you with to access the ensemble. */
            //過期狀態
            Expired (-112),

            /** 
             * The client has been closed. This state is never generated by
             * the server, but is generated locally when a client calls
             * {@link ZooKeeper#close()} or {@link ZooKeeper#close(int)}
             */
            //關閉
            Closed (7);

            //代表狀態的整型值
            private final int intValue;     // Integer representation of value
                                            // for sending over wire

            KeeperState(int intValue) {
                this.intValue = intValue;
            }

            public int getIntValue() {
                return intValue;
            }
            //從整型構造相應的狀態
            public static KeeperState fromInt(int intValue) {
                switch(intValue) {
                    case   -1: return KeeperState.Unknown;
                    case    0: return KeeperState.Disconnected;
                    case    1: return KeeperState.NoSyncConnected;
                    case    3: return KeeperState.SyncConnected;
                    case    4: return KeeperState.AuthFailed;
                    case    5: return KeeperState.ConnectedReadOnly;
                    case    6: return KeeperState.SaslAuthenticated;
                    case -112: return KeeperState.Expired;
                    case   7: return KeeperState.Closed;

                    default:
                        throw new RuntimeException("Invalid integer value for conversion to KeeperState");
                }
            }
        }
EventType

EventType是一個枚舉類,其定義了事件的類型(如創建節點、刪除節點等事件),同時,其還定義了一個從整型值返回對應事件類型的方法fromInt。

 @InterfaceAudience.Public
        public enum EventType {
            //無
            None (-1),
            //結點創建
            NodeCreated (1),
            //結點刪除
            NodeDeleted (2),
            //結點數據變化
            NodeDataChanged (3),
            //子結點變化
            NodeChildrenChanged (4),
            //監聽移除
            DataWatchRemoved (5),
            //子結點監聽移除
            ChildWatchRemoved (6);

            private final int intValue;     // Integer representation of value
                                            // for sending over wire

            EventType(int intValue) {
                this.intValue = intValue;
            }

            public int getIntValue() {
                return intValue;
            }
            //從整型構造相應的事件
            public static EventType fromInt(int intValue) {
                switch(intValue) {
                    case -1: return EventType.None;
                    case  1: return EventType.NodeCreated;
                    case  2: return EventType.NodeDeleted;
                    case  3: return EventType.NodeDataChanged;
                    case  4: return EventType.NodeChildrenChanged;
                    case  5: return EventType.DataWatchRemoved;
                    case  6: return EventType.ChildWatchRemoved;

                    default:
                        throw new RuntimeException("Invalid integer value for conversion to EventType");
                }
            }           
        }

2、枚舉類WatcherType

監聽器類型枚舉

@InterfaceAudience.Public
    public enum WatcherType {
        //子監聽器
        Children(1), 
        //數據監聽
        Data(2), 
        //任意
        Any(3);

        // Integer representation of value
        private final int intValue;

        private WatcherType(int intValue) {
            this.intValue = intValue;
        }

        public int getIntValue() {
            return intValue;
        }
                //整數到類型的轉換
        public static WatcherType fromInt(int intValue) {
            switch (intValue) {
            case 1:
                return WatcherType.Children;
            case 2:
                return WatcherType.Data;
            case 3:
                return WatcherType.Any;

            default:
                throw new RuntimeException(
                        "Invalid integer value for conversion to WatcherType");
            }
        }
    }

WatchedEvent

/**
     * Create a WatchedEvent with specified type, state and path
     */
    public WatchedEvent(EventType eventType, KeeperState keeperState, String path) {
        this.keeperState = keeperState;
        this.eventType = eventType;
        this.path = path;
    }

WatchedEvent類包含了三個屬性,分別代表事件發生時Zookeeper的狀態、事件類型和發生事件所涉及的節點路徑。

以上是“zookeeper中如何實現事件監聽Watcher”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡南县| 景东| 阿合奇县| 中牟县| 保靖县| 五大连池市| 延津县| 南涧| 县级市| 承德县| 那曲县| 开远市| 平阳县| 达州市| 栾城县| 淮阳县| 正宁县| 桐乡市| 揭东县| 小金县| 若羌县| 繁昌县| 年辖:市辖区| 呼和浩特市| 罗定市| 石嘴山市| 阜城县| 营口市| 策勒县| 剑河县| 濮阳市| 铁力市| 专栏| 台东县| 东莞市| 绍兴市| 屏边| 梧州市| 张家口市| 咸宁市| 德钦县|