1. 程式人生 > >[ZooKeeper.net] 1 模仿dubbo實現一個簡要的http服務的註冊 基於webapi

[ZooKeeper.net] 1 模仿dubbo實現一個簡要的http服務的註冊 基於webapi

今天來試著模仿下dubbo實現一個簡要的http服務的註冊,雖說是模仿不過是很廉價的那種,只是模仿了一點點點......

先放上demo目錄結構:

 

開頭還是把ZooKeeper的一些簡要介紹搬過來看看,這樣讓大家也能多瞭解點兒:

      ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,它包含一個簡單的原語集,分散式應用程式可以基於它實現同步服務,配置維護和命名服務等。Zookeeper是hadoop的一個子專案,其發展歷程無需贅述。在分散式應用中,由於工程師不能很好地使用鎖機制,以及基於訊息的協調機制不適合在某些應用中使用,因此需要有一種可靠的、可擴充套件的、分散式的、可配置的協調機制來統一系統的狀態。Zookeeper的目的就在於此。

      Zoopkeeper 提供了一套很好的分散式叢集管理的機制,就是它這種基於層次型的目錄樹的資料結構,並對樹中的節點進行有效管理,從而可以設計出多種多樣的分散式的資料管理模型。

OK,更多介紹大家自行搜尋吧,主要點【基於層次型的目錄樹的資料結構,並對樹中節點進行有效管理】,這句話是不是可以理解就是樹形結構,我也放個圖,省的還要大家腦補......

                      

ps.有關ZooKeeper的安裝不管是windows還是linux不論是單機還是叢集網上一搜好多的,我用的zookeeper-3.4.6 windows版的

首先我們要獲取到ZooKeeper.Net的客戶端

 首先定義個IZooKeeperFactory

複製程式碼
    public interface IZooKeeperFactory
    {
        ZooKeeper Connect(string address);
        ZooKeeper Connect(string address, TimeSpan timeoutSpan);
        ZooKeeper Connect(string address, TimeSpan timeoutSpan, IWatcher watcher);
        ZooKeeper Connect(string address, TimeSpan timeoutSpan, IWatcher watcher, long
sessionId, byte[] password); }
複製程式碼

然後ZooKeeperFactory 和 Watcher

 ZooKeeperFactory  Watcher

以上直接用於建立Zookeeper的例項,各個引數程式碼中也寫了說明

然後我們建立UserServicesController 裡面寫了兩個服務 1.User/sayhello  2.User/saybye

 View Code

我們最終要實現的結果是這樣子的:【x】只是為了起到標示作用 

     ︱-------【1】UserServices
     ︱-----------【1.1】User.sayhello 
     ︱----------------【1.1.1】192.168.0.1:80 
     ︱----------------【1.1.2】192.168.0.2:80 
     ︱-----------【1.2】User.saybye 
     ︱----------------【1.2.1】192.168.0.1:81 
     ︱----------------【1.2.2】192.168.0.2:81

 接下來來看看最主要的一個類 ScanConfig.cs

先說下大概邏輯:

    1.初始化zk客戶端 

    2.將服務名稱UserServices 註冊為主節點 (永久節點)

    3.獲取所有webapi服務路徑 例如:User/saybye 

    4.迴圈將所有服務路徑註冊為zk節點(永久節點)   讀取伺服器IP地址(臨時節點 會話斷開 節點自動消失) 註冊到 每個服務節點下

下面把程式碼貼一下,程式碼中也有註釋,最後會給出demo

 ScanConfig

 最後Global.asax中 Application_Start方法加入就OK了

ScanConfig scan = new ScanConfig();

 有關注冊後節點過一段時間消失的問題可以參考下 _xxy 的http://www.cnblogs.com/xxyBlogs/p/5538583.html 這篇文章。

之前做過一個webservices接口裡面有一些資料是呼叫別的專案的webservices介面,然後第一次訪問這個介面處理時間老是很慢,處理方法跟 _xxy 這種處理大體一致,因為iis有閒時超時跟回收設定,所以到時間或回收後,webservices的xml序列化的操作需要從新做,所以呼叫很耗時,不過往往都是第一次很耗時,序列化過完後面就變的很快,加上當是部署了六臺,不定那一臺就處於閒時狀態,當是就因為這個問題專案耽擱好幾天沒上線,後來設定了iis的閒時超時跟回收設定,又寫了個頁面,頁面的load事件訪問一下webservices,然後Application_Start的時候就啟動一個定時器,設定一定時間後就http get一下這個頁面,等於也是讓序列化的過程在不知不覺中處理掉,這樣有實際業務來的時候序列化的操作不用做了,耗時的問題也不存在了,專案也成功上線了,希望能幫助到有此類問題的童鞋哈!

相關推薦

[ZooKeeper.net] 1 模仿dubbo實現一個簡要http服務註冊 基於webapi

今天來試著模仿下dubbo實現一個簡要的http服務的註冊,雖說是模仿不過是很廉價的那種,只是模仿了一點點點...... 先放上demo目錄結構:   開頭還是把ZooKeeper的一些簡要介紹搬過來看看,這樣讓大家也能多瞭解點兒:       ZooKeeper

初學線程池--1,自己實現一個線程池

exec nta get() 線程 初始化 throw clas 忽略 cti 自己實現一個簡單的線程池 public interface ThreadPool<Job extends Runnable> { // 啟動 void execute

Catlike學習筆記(1.1)-使用Unity實現一個鐘表

時間 tor 裏的 csharp 做了 完全 upd 動畫 鏈接 最近發現『Catlike系列教程』覺得內容真的很贊,感覺有很多地方涉及到了我的知識盲點,如果真的可以照著做下來一遍的話應該收獲頗豐。因為教程很長所以逐字翻譯不太可能了(主要是翻譯的太差)。基本上就是把實現的思

1 WCF 一個基礎理論 以及如何實現一個簡單wcf服務

1 SOA : service oriented architecture 面向服務的架構 2 web service標準 3 概念理解圖 4 WCF類庫 專案的 wcf簡單實現  首先建立一個簡單的wcf類庫 serviceLib:  其次建立一個控制檯 作為宿主 寄宿

分享在Linux下使用OSGi.NET外掛框架快速實現一個分散式服務叢集的方法

在這篇文章我分享瞭如何使用分層與模組化的方法來設計一個分散式服務叢集。這個分散式服務叢集是基於DynamicProxy、WCF和OSGi.NET外掛框架實現的。我將從設計思路、目標和實現三方面來描述。 1 設計思路 首先,我來說明一下設計思路。我們先來看看目前OSGi.NET外掛框架的服務。在這裡,服務不

【Android進階】如何寫一個很屌的動畫(1)---先實現一個簡易的自定義動畫框架

class MyView extends View { public void onDraw(Canvas canvas) { super.onDraw(canvas); invalidate(); } } 這樣一來,View每次繪製都是觸發下一次繪製,不過

vue學習1:vue實現一個HelloWorld

首先:vue 不支援IE8實現一個Helloworld//傳統方法 <div id="app"></div> <script> var dom = document.getElementById('app'); do

ASP.NET Core Blazor WebAssembly實現一個簡單的TODO List

## 基於blazor實現的一個簡單的TODO List 最近看到一些大佬都開始關注blazor,我也想學習一下。做了一個小的demo,todolist,僅是一個小示例,參考此vue專案的實現[http://www.jq22.com/code1339](http://www.jq22.com/code133

Windows 上靜態編譯 Libevent 2.0.10 並實現一個簡單 HTTP 伺服器

      假設 Visual Studio 2005 的安裝路徑為“D:\Program Files\Microsoft Visual Studio 8\”,Libevent 2.0.10 解壓後的路徑為“D:\libevent-2.0.10-stable”。 編譯生成L

實現一個類似 http-server 的靜態服務 一一 ks-server

最近沒事,學習了一下 node,覺得 http-server 這個靜態服務很神奇,突發奇想,自己也來實現這麼一個靜態服務試試。我暫且起名為 static-server。 1. 初始化專案: cd my-server # cd 到我的專案中 yarn init -y 2. 將命令對映成全域性命令 A、首

netty實現一個簡單的服務端和客戶端通訊

netty java Nio網路通訊框架,能接收TCP,http,webSocket,UDPelk包括:logStash,Elasticsearch,KibanaLogStash:tcp監聽netty伺服器傳送的資訊,並把訊息處理好後轉發給ESElasticsearch:接受

Knative 實戰:三步走!基於 Knative Serverless 技術實現一個短網址服務

短網址顧名思義就是使用比較短的網址代替很長的網址。維基百科上面的解釋是這樣的: 短網址又稱網址縮短、縮短網址、URL 縮短等,指的是一種網際網路上的技術與服務,此服務可以提供一個非常短小的 URL 以代替原來的可能較長的URL,將長的 URL 位址縮短。使用者訪問縮短後的 URL 時通常將會重定向到原來的長

如何實現一個短連結服務

短連結,通俗來說,就是將長的URL網址,通過程式計算等方式,轉換為簡短的網址字串。 大家經常會收到一些莫名的營銷簡訊,裡面有一個非常短的連結讓你跳轉。新浪微博因為限制字數,所以也會經常見到這種看著不像網址的網址。短鏈的興起應該就是微博限制字數激起了大家的創造力。 如果建立一個短鏈系統,我們應該做什麼呢? 將

zookeeper開源客戶端Curator典型應用場景之-服務註冊與發現(十一)

隨著業務增加,以前簡單的系統已經變得越來越複雜,單純的提升伺服器效能也不是辦法,而且程式碼也是越來越龐大,維護也變得越來越困難,這一切都催生了新的架構設計風格 – 微服務架構的出現。 微服務給我們帶來了很多好處,例如:獨立可擴充套件、易維護。但是隨著應用的分解

高效能 RPC 框架 Dubbo 從入門到深入-服務註冊中心搭建(詳細)

一、前言 整體來說,一個公司業務系統的演進流程基本都是從單體應用到多應用。在單體應用時,不同業務模組相互呼叫直接在本地 JVM 程序內就可以完成,而變為多個應用時,相互之間進行通訊的方式就不能簡單的進行本地呼叫了,因為不同業務模組部署到了不同的 JVM 程序裡面,更常見的是部署到了不同的機器,

使用netty自行實現簡單的http服務端開發

瞭解http伺服器工作原理:http客戶端和伺服器端的互動步驟:1 client想server傳送http請求2 server端對http請求進行解析3 server端向client傳送http響應4 client對http響應進行解析使用netty自行實現http服務端開發

netty整合springMVC,實現高效的HTTP服務請求

參考http://blog.csdn.net/imlsz/article/details/42673507的程式碼,謝謝!不過在處理返回servlet的結果時候,按照上文的方法不行。 首先,你必須要了解netty,說簡單點:客戶端通過TCP連結和伺服器建立長連線

Netty 實現簡單的HTTP服務

超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。 在後端開發中接觸HTTP協議的比較多,目前大部分都是基於Servlet容器實現的Http服務,往往有一些核心子系統對效能的要求非常高

案例五:shell指令碼實現定時監控http服務的執行狀態

注意:監控方法可以為埠、程序、URL模擬訪問方式,或者三種方法綜合。 說明:由於截止到目前僅講了if語句,因此,就請大家用i

用java實現一個簡易編譯器1-詞法解析入門

new 概念 自加 我們 sta 數字 獲得 () 操作系統 本文對應代碼下載地址為: http://download.csdn.net/detail/tyler_download/9435103 視頻地址: http://v.youku.com/v_show/id_XMT