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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Web Api 基于Zookeeper的服务注册与发现

發布時間:2024/4/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web Api 基于Zookeeper的服务注册与发现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

差異

基于Nginx的服務提供和消費

 
 

基于zookeeper的服務注冊和發現

  

zk的負載均衡是可以調控,nginx只是能調權重,其他需要可控的都需要自己寫插件;但是nginx的吞吐量比zk大很多,可以根據業務選擇用哪種方式。

服務端注冊

1.創建WEB API 程序,使用NuGet下載ZookeeperNet安裝包

    

    

?

2.WEB API 我只提供了一個測試方法

public class DataIndexController : ApiController{[HttpGet]public List<string> GetList(){List<string> result = new List<string>();result.Add("111");result.Add("222");return result;}}

3.WEB API?Global文件中注冊服務地址到Zookeeper

public class WebApiApplication : System.Web.HttpApplication{protected void Application_Start(){GlobalConfiguration.Configure(WebApiConfig.Register);GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();CreateZkNode();}/// <summary>/// 注冊服務節點/// </summary>private void CreateZkNode(){ZkHelper zk = new ZkHelper();string node = AppSettingsHelper.GetStringValue("ServiceNode");///創建節點zk.CreateNode(node, "data");}} <add key="ServiceNode" value="/mysteel/dataindex/localhost:8550" /><add key="ZkConnect" value="192.168.20.90:4181" />

ZkHelper核心代碼如下

連接ZooKeeper并創建監聽

zk = new ZooKeeper(ZkConnectString, new TimeSpan(0, 0, 0, CONST_TIMEOUT), new Watcher());

創建Zookeeper臨時節點和永久節點

if (index == lt.Count - 1){///葉節點設置臨時節點zk.Create(path, "".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral);}else{///父節點設置永久節點zk.Create(path, "".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent);}

創建Zookeeper監聽類

public class Watcher : IWatcher{public void Process(WatchedEvent @event){if (@event.Type == EventType.NodeDataChanged){Console.WriteLine(@event.Path);}if (@event.Type == EventType.NodeChildrenChanged){Console.WriteLine(@event.Path);}}}

監聽分 數據變化和節點變化

?

4.將web api部署三套

5.利用ZooInspector工具查看Zookeeper節點信息

此時服務地址已經注冊上去了

如果我們將IIS應用程序池停止或者網站停止,響應的臨時節點也會刪掉

具體數據一致性可以參考https://www.cnblogs.com/leesf...

客戶端服務發現

static void Main(string[] args){string result = string.Empty;string strService = ZKService.Instanc.GetNode(ZKService.zkNode);if (!string.IsNullOrEmpty(strService)){result = WebHelper.Get(string.Format("http://{0}//api/dataindex/getlist", strService));}System.Console.WriteLine(result);System.Console.Read();} <add key="zkNode" value="/mysteel/dataindex" /><add key="ZkConnect" value="192.168.20.90:4181" />

加群895244712,免費獲取架構師進階學習資料

ZkHelper核心代碼

public string GetNode(string path){string result = string.Empty;try{var stat = zk.Exists(path, true);if (stat != null){//取得/root節點下的子節點名稱,返回List<String> var childData = zk.GetChildren(path, true).OrderBy(l => l).ToList();if (childData.Count > 0){Random random = new Random();int index = random.Next(0, childData.Count);result = childData[index];}}}catch (Exception e){throw e;}return result;}

總結

以上是生活随笔為你收集整理的Web Api 基于Zookeeper的服务注册与发现的全部內容,希望文章能夠幫你解決所遇到的問題。

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