在上一篇 Blog 文中,咱們瞭解到 RSF 的總體設計一共是分了 9 個層次。這一篇 Blog 咱們來專門介紹 RSF 是如何將服務發佈出去的。咱們簡稱服務暴露。bootstrap
讓咱們先來看一張圖,直觀的感覺到服務暴露的具體意義。ide
首先講一下什麼是服務暴漏,服務暴露簡單地講就是把服務接口信息收集起來而後加以管理。對於服務提供者(Provider)來講,當有服務調用請求進來時能夠快速的找到服務對象並加以調用。而對於服務消費者(Customer)來講,服務暴露則能夠爲發起服務調用時提供充足 RPC 請求信息。spa
如今咱們知道了什麼是服務暴露,接下來咱們探一探 RSF 對於服務是如何進行描述的。設計
RSF 的服務信息,是由 RsfBindInfo 接口進行最高級別的抽象。這個接口繼承自 Hasor 的 BindInfo,下面還有 3個子類。先上一張類圖加一說明。server
父接口就很少說了,目前來講無外乎就是公用方法。之後會在 Hasor 的底層上進行打通。下面三個子類各有個的做用,這個須要介紹一下。對象
首先 RsfBindInfoWrap 子類,它就像名字裏的 Wrap 所表達的同樣,他就是一個包裝類。裏面什麼都沒幹。這個類的做用是,當咱們想要擴展 RsfBindInfo 並增長一些屬性時。咱們不須要去修改底層的實現類,只須要繼承包裝類並加上本身的轉有屬性就能夠。---- 這是典型的裝飾模式的應用。繼承
其次 ServiceDomain 類,這個類是一個領域模型 Bean 在這裏保存了大量的屬性信息,RsfBindInfo 接口中所表達的全部屬性,在這個類裏都能找到它們的身影。下面這張圖顯示了,這個類都定義了哪些屬性。接口
最後 ServiceDefine 這個類比較特殊,你們或許以爲。服務的全部信息在上面 ServiceDomain 類中已經定義好了,那麼 ServiceDefine 到底是什麼做用呢?cli
咱們先進去一探究竟,下面這個類是 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」。
有興趣的同窗能夠更佳深刻的去分析裏面的實現邏輯。