日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过Zookeeper动态感知服务器上下线[案例]

發布時間:2025/4/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Zookeeper动态感知服务器上下线[案例] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/USTC_Zn/article/details/54974982

主體思路:

服務器端:服務器上線、在zookeeper創建 臨時的序列化結點

客戶端:已啟動getchildren 并注冊監聽 ,獲取到當前在線服務器列表。

效果:

客戶端能動態感知服務器上下線情況、并獲取新的服務器列表

?

服務器端源碼:

?

[java] view plaincopy
  • package?com.zn.zk1;??
  • ??
  • import?org.apache.zookeeper.CreateMode;??
  • import?org.apache.zookeeper.WatchedEvent;??
  • import?org.apache.zookeeper.Watcher;??
  • import?org.apache.zookeeper.ZooDefs.Ids;??
  • import?org.apache.zookeeper.ZooKeeper;??
  • ??
  • public?class?DistributedServer?{??
  • ????private?static?final?String?connectString?=?"zk01:2181,zk02:2181,zk03:2181";??
  • ????private?static?final?int?sessionTimeout?=?2000;??
  • ????private?static?final?String?parentNode?=?"/servers";??
  • ??
  • ????private?ZooKeeper?zk?=?null;??
  • ??????
  • ??????
  • ????/**?
  • ?????*?模擬服務器上線?
  • ?????*?@param?args?
  • ?????*?@throws?Exception?
  • ?????*/??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ??
  • ????????//?獲取zk連接??
  • ????????DistributedServer?server?=?new?DistributedServer();??
  • ????????server.getConnect();??
  • ??
  • ????????//?利用zk連接注冊服務器信息??
  • ????????server.registerServer(args[0]);??
  • ??
  • ????????//?啟動業務功能??
  • ????????server.handleBussiness(args[0]);??
  • ??
  • ????}??
  • ????/**?
  • ?????*?創建到zk的客戶端連接?
  • ?????*??
  • ?????*?@throws?Exception?
  • ?????*/??
  • ????public?void?getConnect()?throws?Exception?{??
  • ??
  • ????????zk?=?new?ZooKeeper(connectString,?sessionTimeout,?new?Watcher()?{??
  • ??????????????
  • ????????????public?void?process(WatchedEvent?event)?{??
  • ????????????????//?收到事件通知后的回調函數(應該是我們自己的事件處理邏輯)??
  • ????????????????System.out.println(event.getType()?+?"---"?+?event.getPath());??
  • ????????????????try?{??
  • ????????????????????zk.getChildren("/",?true);??
  • ????????????????}?catch?(Exception?e)?{??
  • ????????????????}??
  • ????????????}??
  • ????????});??
  • ??
  • ????}??
  • ??
  • ????/**?
  • ?????*?向zk集群注冊服務器信息?
  • ?????*??
  • ?????*?@param?hostname?
  • ?????*?@throws?Exception?
  • ?????*/??
  • ????public?void?registerServer(String?hostname)?throws?Exception?{??
  • ??????????
  • ????????//運行時請手動創建父節點/servers??
  • ????????//臨時的臨時的序列化結點??
  • ????????String?create?=?zk.create(parentNode?+?"/server",?hostname.getBytes(),?Ids.OPEN_ACL_UNSAFE,?CreateMode.EPHEMERAL_SEQUENTIAL);??
  • ????????System.out.println(hostname?+?"is?online.."?+?create);??
  • ??
  • ????}??
  • ??
  • ????/**?
  • ?????*?業務功能?
  • ?????*??
  • ?????*?@throws?InterruptedException?
  • ?????*/??
  • ????public?void?handleBussiness(String?hostname)?throws?InterruptedException?{??
  • ????????System.out.println(hostname?+?"start?working.....");??
  • ????????Thread.sleep(Long.MAX_VALUE);????
  • ????}??
  • ??
  • ??
  • ??
  • }??


  • -----------------------華麗的分界線---------------------

    客戶端源碼:

    ?

    [java] view plaincopy
  • package?com.zn.zk1;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • import?org.apache.zookeeper.KeeperException;??
  • import?org.apache.zookeeper.WatchedEvent;??
  • import?org.apache.zookeeper.Watcher;??
  • import?org.apache.zookeeper.ZooKeeper;??
  • ??
  • public?class?DistributedClient?{??
  • ??
  • ????private?static?final?String?connectString?=?"zk01:2181,zk02:2181,zk03:2181";??
  • ????private?static?final?int?sessionTimeout?=?2000;??
  • ????private?static?final?String?parentNode?=?"/servers";??
  • ??????
  • ????/**?注意:加<span?style="color:#ff0000;"><strong>volatile的意義</strong></span>何在?---serverList對象在JVM堆中,多線程時會對該對象進行更改,每個線程對該對象操作會?
  • ?????*??????copy一個副本到本地線程棧,再對該對象進行修改操作,改完后,再將該對象同步到共享的堆內存中。?
  • ?????*?????被volatile修飾的對象則不會被copy到本地線程棧。所有線程看到的該對象是同一個。不會出現多線程問題。?
  • ?????*/??
  • ????private?volatile?List<String>?serverList;??
  • ????private?ZooKeeper?zk?=?null;??
  • ??????
  • ??????
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ??
  • ????????//?獲取zk連接??
  • ????????DistributedClient?client?=?new?DistributedClient();??
  • ??????????
  • ????????//創建zookeeper連接??
  • ????????client.getConnect();??
  • ??????????
  • ????????//?獲取servers的子節點信息(并監聽),從中獲取服務器信息列表??
  • ????????client.getServerList();??
  • ??
  • ????????//?業務線程啟動??
  • ????????client.handleBussiness();??
  • ??????????
  • ????}??
  • ??
  • ????/**?
  • ?????*?業務功能?
  • ?????*??
  • ?????*?@throws?InterruptedException?
  • ?????*/??
  • ????public?void?handleBussiness()?throws?InterruptedException?{??
  • ????????System.out.println("client?start?working.....");??
  • ????????Thread.sleep(Long.MAX_VALUE);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?創建到zk的客戶端連接?
  • ?????*?@throws?Exception?
  • ?????*/??
  • ????public?void?getConnect()?throws?Exception?{??
  • ??
  • ????????zk?=?new?ZooKeeper(connectString,?sessionTimeout,?new?Watcher()?{??
  • ??????????????
  • ????????????public?void?process(WatchedEvent?event)?{??
  • ????????????????//?收到事件通知后的回調函數(應該是我們自己的事件處理邏輯)??
  • ????????????????try?{??
  • ????????????????????//重新更新服務器列表,并且注冊了監聽??
  • ????????????????????getServerList();??
  • ??
  • ????????????????}?catch?(Exception?e)?{??
  • ????????????????}??
  • ????????????}??
  • ????????});??
  • ??
  • ????}??
  • ??
  • ????/**?
  • ?????*?獲取服務器信息列表?
  • ?????*??
  • ?????*?@throws?Exception?
  • ?????*/??
  • ????public?void?getServerList()?throws?Exception?{??
  • ??
  • ????????//?獲取服務器子節點信息,并且對父節點進行監聽??
  • ????????List<String>?children?=?zk.getChildren(parentNode,?true);??
  • ??
  • ????????//?先創建一個局部的list來存服務器信息??
  • ????????List<String>?servers?=?new?ArrayList<String>();??
  • ????????for?(String?child?:?children)?{??
  • ????????????//?child只是子節點的節點名??
  • ????????????byte[]?data?=?zk.getData(parentNode?+?"/"?+?child,?false,?null);??
  • ????????????servers.add(new?String(data));??
  • ????????}??
  • ????????//?把servers賦值給成員變量serverList,已提供給各業務線程使用??
  • ????????serverList?=?servers;??
  • ??????????
  • ????????//打印服務器列表??
  • ????????System.out.println(serverList);??
  • ??????????
  • ????}??
  • }??

  • 最后:可以將兩個java文件分別打包、部署到服務器測試、也可以在IDE上測試執行效果。

    轉載于:https://www.cnblogs.com/davidwang456/articles/8729355.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的通过Zookeeper动态感知服务器上下线[案例]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产一级爽片 | 成人综合av | 日韩www| 日韩欧美国产亚洲 | chinese麻豆新拍video | 亚洲一区二区三区在线观看视频 | 热@国产| 久久亚洲网| 欧美v在线 | 中文字幕一区二区三区精彩视频 | 国产乱妇4p交换乱免费视频 | 日韩在线影视 | 天天干,夜夜操 | 亚州精品视频 | 亚洲成色在线 | 欧美青青草 | 精品一区二区免费看 | 日韩h在线 | 国产新婚疯狂做爰视频 | 久久特级毛片 | 久草高清视频 | 2017天天干| 9191久久 | 91啪国产在线 | 中文字幕精品一区久久久久 | 精品免费视频 | 中国女人性猛交 | 亚洲 欧美 日韩 国产综合 在线 | 亚洲黄色免费观看 | 中文字幕在线观看视频一区 | 免费观看污视频 | 日韩在线高清 | 午夜精品少妇 | 美女在线播放 | 天天操天天拍 | 三级国产在线观看 | 亚洲成人一区二区 | 国产精选中文字幕 | 久久久精品一区二区三区 | 啦啦啦免费高清视频在线观看 | 三级黄色网络 | 老鸭窝视频在线观看 | 成人免费自拍视频 | 久久久极品 | 亚洲av无码一区二区三区在线 | jizz黄色片 | 99视频网 | 色老头一区二区三区 | 在线欧美激情 | 人体私拍套图hdxxxx | 中文字幕精品一区久久久久 | 蜜桃网av | 精品福利片 | 久久久久久久久久影视 | 日本老太婆做爰视频 | 香蕉视频18 | h片免费在线观看 | 色综合天天综合网天天狠天天 | 国产黄色高清视频 | 久久99精品久久久久 | 欧美日韩一区二区区别是什么 | 亚洲国产麻豆 | 人人av在线 | 国产精品久久久久久 | 三级a级片 | 午夜福利视频一区二区 | 18禁裸乳无遮挡啪啪无码免费 | 天天干夜夜艹 | 男女一进一出视频 | 超碰在线视屏 | 国产激情久久久 | 久在线播放 | 中文精品在线 | 久久精品黄aa片一区二区三区 | 五月婷婷综合在线 | 欧美性猛交乱大交xxxx | 在线看日本 | 无码人妻精品一区二区三区99v | 日韩中文字幕免费在线观看 | 久久香蕉综合 | 国产经典久久久 | 免费的一级片 | 亚洲av无码日韩精品影片 | 黑丝一区二区三区 | 一区二区三区四区在线观看视频 | 国产对白羞辱绿帽vk | 国产www在线观看 | 欧美另类综合 | 精品97人妻无码中文永久在线 | 在线免费播放av | 国产97免费视频 | 欧日韩不卡视频 | 免费看麻豆 | 无码无套少妇毛多18pxxxx | 明星双性精跪趴灌满h | 久久久久久9999 | 三级av片 | 97自拍视频 | www.九色 |