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

溫馨提示×

溫馨提示×

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

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

ZooKeeper異常該怎么解決

發布時間:2021-12-01 16:29:19 來源:億速云 閱讀:385 作者:柒染 欄目:云計算

ZooKeeper異常該怎么解決,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

在Java API中的每一個ZooKeeper操作都在其throws子句中聲明了兩種類型的異常,分別是InterruptedException和KeeperException。

(一)InterruptedException異常

如果操作被中斷,則會有一個InterruptedException異常被拋出。在Java語言中有一個取消阻塞方法的標準機制,即針對存在阻塞方法的線程調用interrupt()。一個成功的取消操作將產生一個InterruptedException異常。

ZooKeeper也遵循這一機制,因此你可以使用這種方法來取消一個ZooKeeper操作。使用了ZooKeeper的類或庫通常會傳播InterruptedException異常,使客戶端能夠取消它們的操作。InterruptedException異常并不意味著有故障,而是表明相應的操作已經被取消,所以在配置服務的示例中,可以通過傳播異常來中止應用程序的運行。

(二)KeeperException異常

(1) 如果ZooKeeper服務器發出一個錯誤信號或與服務器存在通信問題,拋出的則是KeeperException異常。

針對不同的錯誤情況,KeeperException異常存在不同的子類。

例如: KeeperException.NoNodeException是KeeperException的一個子類,如果你試圖針對一個不存在的znode執行操作,拋出的則是該異常。

每一個KeeperException異常的子類都對應一個關于錯誤類型信息的代碼。

例如: KeeperException.NoNodeException異常的代碼是KeeperException.Code.NONODE

(2) 有兩種方法被用來處理KeeperException異常:

①捕捉KeeperException異常,并且通過檢測它的代碼來決定采取何種補救措施;

另一種是捕捉等價的KeeperException子類,并且在每段捕捉代碼中執行相應的操作。

(3) KeeperException異常分為三大類

① 狀態異常 

當一個操作因不能被應用于znode樹而導致失敗時,就會出現狀態異常。狀態異常產生的原因通常是在同一時間有另外一個進程正在修改znode。例如,如果一個znode先被另外一個進程更新了,根據版本號執行setData操作的進程就會失敗,并收到一個KeeperException.BadVersionException異常,這是因為版本號不匹配。程序員通常都知道這種沖突總是存在的,也都會編寫代碼來進行處理。

一些狀態異常會指出程序中的錯誤,例如KeeperException.NoChildrenForEphemeralsException異常,試圖在短暫znode下創建子節點時就會拋出該異常。

② 可恢復異常

可恢復的異常是指那些應用程序能夠在同一個ZooKeeper會話中恢復的異常。一個可恢復的異常是通過KeeperException.ConnectionLossException來表示的,它意味著已經丟失了與ZooKeeper的連接。ZooKeeper會嘗試重新連接,并且在大多數情況下重新連接會成功,并確保會話是完整的。

但是ZooKeeper不能判斷與KeeperException.ConnectionLossException異常相關的操作是否成功執行。這種情況就是部分失敗的一個例子。這時程序員有責任來解決這種不確定性,并且根據應用的情況來采取適當的操作。在這一點上,就需要對“冪等”(idempotent)操作和“非冪等”(Nonidempotent)操作進行區分。冪等操作是指那些一次或多次執行都會產生相同結果的操作,例如讀請求或無條件執行的setData操作。對于冪等操作,只需要簡單地進行重試即可。對于非冪等操作,就不能盲目地進行重試,因為它們多次執行的結果與一次執行是完全不同的。程序可以通過在znode的路徑它的數據中編碼信息來檢測是否非冪等操怍的更新已經完成。

③不可恢復的異常 

在某些情況下,ZooKeeper會話會失效——也許因為超時或因為會話被關閉,兩種情況下都會收到KeeperException.SessionExpiredException異常,或因為身份驗證失敗,KeeperException.AuthFailedException異常。無論上述哪種情況,所有與會話相關聯的短暫znode都將丟失,因此應用程序需要在重新連接到ZooKeeper之前重建它的狀態。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

梅河口市| 阜康市| 湘潭县| 交口县| 太湖县| 喀喇沁旗| 怀来县| 澄城县| 绥中县| 于田县| 定襄县| 益阳市| 济宁市| 怀仁县| 平南县| 周至县| 青海省| 呼和浩特市| 惠东县| 揭西县| 奇台县| 福贡县| 冕宁县| 英德市| 光山县| 绥棱县| 介休市| 台东县| 桂林市| 徐闻县| 东乌珠穆沁旗| 三明市| 大洼县| 荔波县| 古丈县| 阳高县| 马山县| 承德县| 桑植县| 惠州市| 金川县|