1. 程式人生 > 實用技巧 >RSF 分散式 RPC 服務資訊的暴露

RSF 分散式 RPC 服務資訊的暴露

>>> hot3.png

在上一篇 Blog 文中,我們瞭解到 RSF 的整體設計一共是分了 9 個層次。這一篇 Blog 我們來專門介紹 RSF 是如何將服務釋出出去的。我們簡稱服務暴露。

什麼是服務暴露?

讓我們先來看一張圖,直觀的感受到服務暴露的具體意義。

首先講一下什麼是服務暴漏,服務暴露簡單地講就是把服務介面資訊收集起來然後加以管理。對於服務提供者(Provider)來說,當有服務呼叫請求進來時可以快速的找到服務物件並加以呼叫。而對於服務消費者(Customer)來說,服務暴露則可以為發起服務呼叫時提供充足 RPC 請求資訊。

服務資訊定義

現在我們知道了什麼是服務暴露,接下來我們探一探 RSF 對於服務是如何進行描述的。

RSF 的服務資訊,是由 RsfBindInfo 介面進行最高級別的抽象。這個介面繼承自 Hasor 的 BindInfo,下面還有 3個子類。先上一張類圖加一說明。

父介面就不多說了,目前來說無外乎就是公用方法。以後會在 Hasor 的底層上進行打通。下面三個子類各有個的作用,這個需要介紹一下。

首先 RsfBindInfoWrap 子類,它就像名字裡的 Wrap 所表達的一樣,他就是一個包裝類。裡面什麼都沒幹。這個類的作用是,當我們想要擴充套件 RsfBindInfo 並增加一些屬性時。我們不需要去修改底層的實現類,只需要繼承包裝類並加上自己的轉有屬性就可以。---- 這是典型的裝飾模式的應用

其次 ServiceDomain 類,這個類是一個領域模型 Bean 在這裡儲存了大量的屬性資訊,RsfBindInfo 介面中所表達的所有屬性,在這個類裡都能找到它們的身影。下面這張圖顯示了,這個類都定義了哪些屬性。

最後 ServiceDefine 這個類比較特殊,大家或許覺得。服務的所有資訊在上面 ServiceDomain 類中已經定義好了,那麼 ServiceDefine 究竟是什麼作用呢?

我們先進去一探究竟,下面這個類是ServiceDefine 的節選。

大家可以看到,它是通過裝飾模式擴充套件了RsfBindInfoWrap 並定義了一些自己的屬性。這些屬性裡面我們看到。和 ServiceDomain 不同,ServiceDomain 類中定義的都是服務的基本資訊。而這裡的屬性都是服務執行呼叫時緊密相關的一些資料。

例如:filterList,這個屬性裡儲存了服務的定義的所有私有 RsfFilter,而 customerProvider 屬性我們可以通過它獲取服務物件。此外 oriFlowControl 表示了服務的流控規則。

服務註冊

服務註冊的目的是為了,讓當有服務消費者想要消費服務的時候可以有資訊可以查詢。這就需要引入註冊中心的角色。下面圖中表示了RSF 中註冊中心的地位。

在 RSF 中,註冊中心是一個獨立的功能。並且位於“net.hasor.rsf.center”包下。前面在服務資訊定義小節已經明確服務資訊所包含的資訊,現在就開看看註冊中心對於服務資訊的類圖關係。

從類圖中也可以看到,RSF 的註冊中心對於服務定義的描述十分直接。一個基類另外兩個字類一個表示服務提供者,另外一個表示為服務消費者。接下來我們來看一看 RSF 註冊中心是如何啟動的。

註冊中心的執行分為 客戶端 和 服務端。

客戶端:客戶端負責收集 RSF 的所有服務資訊,並形成上面兩個對應的註冊中心 Bean 。而服務端負責收集並管理這些 Bean。

在 RSF 中註冊中心客戶端的啟動入口是“net.hasor.rsf.center.client.RsfCenterModule”,Center 服務端啟動入口為“net.hasor.rsf.center.server.bootstrap.RsfCenterFrameworkModule”。

有興趣的同學可以更佳深入的去分析裡面的實現邏輯。

轉載於:https://my.oschina.net/ta8210/blog/778245