【教程】使用Vantiq Pronto進行多namespace管理

Vantiq的Pronto是一個Dynamic Advanced Event Broker​,爲構建實時企業應用,提供一個動態的分佈式的事件管理、監控、權限等功能。Pronto進行Event Catalog的權限管理,是通過namespace實現的。這篇文章我們就看看如何通過多個namespace來實現不同的服務訪問Event時的權限控制。

場景描述
該實例的場景描述如下:

pronto-event-pub-sub

在這個例子當中,有2個Event:

事件"/domainAbc/eventAA",它有一個發佈者"/serviceA/domainAbc",ServiceA服務的一個方法,通過發送消息到這個發佈隊列,來發布事件。它有2個訂閱者,"/service1/DomainFoo"和"/service2/DomainBar",分別由2個Service,通過這個訂閱隊列來消費事件。
事件"/domainEFG/eventEE",它有一個發佈者"/serviceA/domainEFG",和一個訂閱者"/service2/DomainGo",他們分別由ServiceA發佈和Service2訂閱。
同時,不同的Service只能訪問自己的namespace裏面的訂閱者和發佈者,我們可以通過這個來控制服務對事件權限。

在vantiq中,我們還可以通過用戶組來控制一個namespace中的不同用戶組,對不同的event事件的權限。但是在這個例子中,由於我們想通過不同的namespace隔離不同的服務能夠訪問的本地隊列,所以,使用namespace進行權限隔離。

在下面的步驟當中,我們需要創建namespace,然後在pronto裏面創建Event,定義訂閱者、發佈者,再進行授權。

在切換不同的namespace的時候,一般都會提示是否保存當前的project,在Vantiq中,project是一個邏輯概念,我們用project來組織各種resources。當保存一個project時,就是保存這個project包含的resources,以及它在網頁IDE中顯示的狀態,下次再打開,還能打開之前打開的東西。在我們的實例中,namespace中創建的Event、隊列等在操作相應按鈕的時候就已經創建,就保存在該namespace的resources中了,所以不需要再保存在某個項目中。如果想下次打開namespace的時候,打開之前打開的組件,那就可以創建一個項目保存下來。

創建namespace
這個例子中,我們要使用4個namespace,分別叫"ms_catalog",“ms_serviceA”,“ms_service1"和"ms_service2”。

先創建ms_catalog,進入dev.vantiq.cn,打開"operations"進行namesp創建:

step1-namespace

打開namespace管理界面以後,點擊"create"創建:

step2-namespace-create.jpg

然後依次再創建其他3個namespace。然後,切換到這個新建的 ms_catalog namespace上:

step3-namespace-switch.jpg

Pronto Event Catalog
創建好namespace以後,進入ms_catalog這個namespace,我們將要在這個namespace裏面創建Catalog。在Administer裏面打開namespace列表,從裏面打開ms_catalog這個namespace:

step4-namespace-create-catalog.jpg

注意,我們只需要在ms_catalog這個namespace上創建catalog,其他的幾個都不需要。其他的namespace會通過access token的方式授權訪問這個catalog namespace,並使用這個裏面的事件定義。

下面就開始創建事件Event。我們在創建Event之前,需要先給這個事件定義個Type,來作爲事件消息的schema。打開development的Tab,點擊Add,添加一個Type:

step5-catalog-create-type.jpg

然後點擊新建以後,在Type創建/編輯頁面,輸入Type的名字,設置屬性:

step6-catalog-create-type-properties.jpg

然後,再創建一個EventEE,屬性也是id, name。

現在就可以創建Event了,在Show下面找到Event Catalog並打開,點新建來創建:

step7-catalog-create-catalog1.jpg

輸入相應的內容,保存的時候會彈出對話框設置關鍵字,這個關鍵字是用於查詢過濾等。

step8-catalog-create-catalog2.jpg

創建完2個Type,2個Event以後,應該是這樣的,我們可以在Event Catalog界面的輸入框輸入事件名、字段、關鍵字來進行事件的查詢。這是爲了方便之後打開這個namespace的時候能打開之前打開的東西,可以選擇保存項目。

step9-catalog-create-catalog-list.jpg

授權發佈者和訂閱者的namespace
下面我們就需要讓我們的發佈者ServiceA所在的namespace和2個訂閱者Service的namespace能夠訪問Event Catalog的事件。確保還在"ms_catalog"的namespace中,打開access tokens界面:

step10-access-tokens-open.jpg

這裏面列出的是先有所有的access token。access token的用處就是授權訪問某一個namespace,所以我們要創建一個token給其他幾個namespace,以讓他們能訪問這個namespace裏面的Event Catalog。點擊新建:

step11-access-tokens-create.jpg

創建好以後,在列表中找到這個token並複製:

step12-access-tokens-copy.jpg

然後,我們進入ms_serviceA這個namespace,我們要在這個namespace中連接到ms_catalog中定義的Event Catalog。進入ms_serviceA這個namespace後,打開namespace列表,點擊自己的namespace,設置Event Catalog鏈接:

step13-link-catalog-namespace.jpg

然後在彈出的對話框裏複製剛纔拷貝的token,然後點擊"Add Catalog"來添加鏈接。添加成功後,會在下面顯示鏈接到的namespace名字,確保

step14-link-catalog-namespace-result.jpg

爲Service1和Service2進行同樣的操作,這樣,我們的3個服務使用的namespace對Catalog所在的namespace的授權就進行完了。

創建事件發佈者
完成了所有的service所在的命名空間對Catalog命名空間的授權以後,我們就來創建事件的發佈者。在這個例子中,ServiceA這個服務能夠發佈這兩個事件,所以我們需要在’ms_serviceA’這個命名空間中針對這兩個事件創建發佈者隊列。這樣ServiceA這個服務就能夠空間它的發佈者隊列,發送消息到事件上。

所以,進入’ms_serviceA’命名空間,打開Event Catalog,點擊一個事件,查看事件的發佈者:

step15-event-publisher-view.jpg

在彈出的對話框中,我們可以看到目前這個事件的所有發佈者,目前是沒有任何發佈者的,它可能彈出一個窗口警告說沒有找到發佈者。我們可以通過一個Source來發布事件,也可以通過一個Topic隊列來發布。我們選擇Topic。數據我們的之前定義好的隊列名’/serviceA/domainAbc’。這個隊列名的命名是說’serviceA’的’domainAbc’領域對象發生變化,產生的事件。

step16-event-publisher-add.jpg

我們輸入隊列名並創建以後,新建的隊列就會顯示到下面:

step17-event-publisher-result.jpg

注意這裏,‘Local Event Path’意思就是在ms_serviceA這個namespace裏面,發佈事件使用的隊列,這個隊列的名字前面自動加上了’/topics’的前綴。

同樣,我們也給’/domainEFG/eventEE’這個事件加上發佈者隊列’/serviceA/domainEFG’。

創建事件訂閱者
跟創建發佈者隊列類似,我們現在進入’ms_service1’這個命名空間,由於’Service1’只需要訂閱事件’/domainAbc/eventAA’,所以只是在這個事件上創建一個訂閱者。打開Event Catalog,點擊這個事件,查看事件的訂閱者:

在彈出的對話框中輸入隊列名’/service1/DomainFoo’創建,可以看到下面的結果:

step19-event-subscription-view.jpg

這裏的’Local Event’就是針對’ms_service1’這個命名空間本地隊列,創建完以後,它的名字前不會添加前綴。如果需要命名統一,可以自行添加。

同樣,進入’ms_service2’這個命名空間,Serice2在兩個事件上都需要訂閱,所以要創建2個訂閱者隊列,也就是對事件’/domainAbc/eventAA’,訂閱者是’/service2/DomainBar’,對事件’/domainEFG/eventEE’訂閱者是’/service2/DomainGo’。

在Catalog中查看發佈、訂閱
我們創建完了發佈者、訂閱者,下面就能在’ms_catalog’命名空間中查看我們的事件,以及這些事件上的發佈者、訂閱者。如果有一些服務不應該對某些事件進行訂閱,就可以在這裏看到並刪除。

這樣,我們在企業範圍內的所有事件都可以在一個地方統一的管理,並通過圖形界面的方式查看、搜索,查看數據,查看發佈者、訂閱者等。

發佈訂閱事件
至此,就完成了事件在多個namespace之間的組織,Event的創建,發佈者和訂閱者的創建,接下來,就可以在Java客戶端或其他客戶端裏,發佈、訂閱事件。具體的代碼跟上一篇類似,就不再贅述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章