1. 程式人生 > >學習釋出/訂閱機制

學習釋出/訂閱機制

簡介

在軟體結構中,釋出訂閱是一種訊息模式(一種面向網路結構的模式,描述了兩種不同部分的訊息怎麼去互相連線和溝通),其中包括非直接傳遞資訊的publisher叫publish,和接收資訊的subscriber叫subscribe。subscriber把不同的訊息進行分類,同時不需要知道subscriber是誰。subscriber訂閱感興趣的分類,並只接收訂閱的分類中資訊,同時也不需要知道publisher是誰。
釋出訂閱機制通常和訊息佇列機制一樣,也是一種典型的大型的面相資訊中介軟體系統的一部分。

訊息過濾

在訂閱釋出模型中,subscriber只接收所有釋出的資訊中的一部分。選擇接收的資訊的過程叫過濾。有兩種過濾機制:
基於主題

:
publisher釋出不同主題的訊息,subscriber接收選擇已訂閱的主題的訊息。不同subscriber訂閱相同主題的話接收的資訊相同。publisher定義不同subscriber可以訂閱的資訊的類別。
基於內容
只有當傳送的訊息的屬性或者內容符合subscriber制定的規則,訊息才會傳送給subscribes。

一些系統支援兩種過濾機制的混合使用,即publisher釋出一個訊息到一個主題,同時subscriber制定了基於內容的限制的訂閱在這個主題上。

應用

在很多訂閱釋出系統中,publisher釋出資訊到一個資訊中介或者是事件公交車,同時subscriber註冊訂閱資訊到這個資訊中介,同時資訊中介擔當著過濾的作用。資訊中介一般扮演著暫存和繼續傳送從publisher按照路線傳送到subscriber的訊息的角色。另外,資訊中介可能會在按路線運送訊息前在訊息佇列中對訊息的優先順序進行處理。

subscriber可能會註冊特定的訊息在構建時,初始化時或者執行時。GUI系統在系統構建的時候就會進行使用者點選等訊息的訂閱。一些框架和軟體產品用XML在初始化註冊訂閱資訊。許多複雜的別的系統則在執行時進行訂閱處理 ,例如RSS。

優點

1.低耦合
publisher和subscriber時低耦合的,他們可以繼續執行而不用管對方的狀態。在傳統的客服端-伺服器範例中,伺服器不執行,客戶端就不能傳送訊息到伺服器。客戶端不執行,伺服器就接收不到訊息。
2.可擴充套件型
通過平行的執行機制,訊息快取機制,基於一定規則的訊息傳送機,相比通常的客戶端-服務端模式,訂閱釋出模式有更好的擴充套件性。但是在高耦合大容量的企業級環境中,不適合訂閱釋出機制。

缺點

低耦合
為什麼這麼說呢?publisher的訊息資料結構必須定義的很合理,有相當的伸縮性。為了更改要釋出的訊息資料結構,publisher可能要知道所有的subscriber,同時也要修改他們或者與舊版本保持相容。這使得重構publisher變的很困難。因為隨著時間推移可能會更改需求,publisher資料結構的不變性會成為負擔。
However, this is a common issue with any client/server architecture and is best served by versioning content payloads or topics and/or changing URL end points for backward compatibility.