10 發布訂閱模型

2021-07-24 20:23:19 字數 1073 閱讀 2160

icestorm 是乙個高效的用於ice應用的發布/訂閱服務,icestorm有幾個比較重要的概念:

² 訊息:icestorm的訊息和普通的訊息佇列中介軟體中描述的訊息有點區別,   

icestorm 的訊息是強型別的,由對某個slice 操作的呼叫 代表:操作名 標識 訊息的型別,操作引數 定義 訊息內容。

要發布訊息,可以按普通的方式呼叫某個icestorm **上的操作。

與此類似,訂閱者會像收到常規的向上呼叫(upcall)一樣收到訊息。所以icestorm 的訊息遞送使用的是「推」模式

² 主題:應用要通過訂閱某個主題(topic)來表明自己有興趣接收某些訊息。icestorm 伺服器能夠支援任意數量的主題,這些主題是動態建立的,通過唯一的名字來區分。每個主題都可以有多個發布者和訂閱者。 

² 持久模式:icestorm 擁有乙個資料庫,裡面維護的是關於其主題和鏈結的資訊。但是,通過icestorm 傳送的訊息不會被持久地儲存,而是會在遞送給主題目前的訂閱者集之後,馬上被丟棄。如果在把訊息遞送給某個訂閱者的過程中發生錯誤,icestorm 不會為該訂閱者進行訊息排隊。

² 訂閱者出錯:因為icestorm 訊息是採用單向語義遞送的, icestorm 只能檢測到連線或超時錯誤。如果在把訊息遞送給訂閱者的過程中, icestorm 遇到這樣的錯誤,該訂閱者就會立刻被解除與該訊息對應的主題的訂閱。當然使用者在使用過程中也可以通過設定qos引數來改善這個問題,比如重試次數(retrycount),但是對於objectnotexistexception 或者 notregisteredexception之類的硬錯誤,ice執行時不會重試,而是仍然直接解除訂閱關係。

icestorm支援兩個主要的qos引數reliability 和 retrycount,reliability的取值分別為ordered 和空值,取ordered時,發布者發布的訊息會保證按順序遞送給訂閱者。

從icestorm提供的功能來看,對於不需要進行訊息持久儲存**的應用來說很適合,但是由於在訂閱者出錯後立即解除訂閱關係,不是由訂閱者主動解除,這個在應用中需要特別注意是否符合實際應用。

icestorm被實現為icebox服務,所以在部署icestorm應用時需要啟動icebox服務。

17 發布與訂閱

redis的發布與訂閱功能由publish subscribe psubscribe等命令組成。通過執行subscribe命令,客戶端可以訂閱乙個或多個頻道,從而成為這些頻道的訂閱者 subscriber 每當有其他客戶端向被訂閱的頻道傳送訊息 message 時,頻道的所有訂閱者都會收到這個訊息。...

redis 二 發布訂閱

參考資料 redis 4.x cookbook 中文版 redis官方文件 注 本文redis的版本為 5.0.3 注意,如果先發布訊息,然而頻道沒有訂閱者,這時的訊息會被丟失 redis的發布訂閱是乙個訊息推送的機制 發布者 publisher 向指定頻道 channel 發布訊息 message...

3 1 7 發布訂閱模式

發布訂閱模式和觀察者模式是兩種設計模式,在 vue 中有各自的應用場景。兩種模式的本質是相同的,但是還是有區別的,經常被混為一談。我們假定,存在乙個 訊號中心 某個任務執行完畢,就向訊號中心 發布 publish 乙個訊號,其他任務可以向訊號中心 訂閱 subscribe 這個訊號,從開知道什麼時候...