分布式通訊之發布訂閱

2021-10-06 20:30:55 字數 1952 閱讀 7911

由此可以看出,發布訂閱的三要素是生產者、消費者和訊息中心,生產者負責產生資料放到訊息中心,消費者向訊息中心訂閱自己感興趣的訊息,當發布者推送資料到訊息中心後,訊息中心根據消費者訂閱情況將相關資料推送給對應的訂閱者。

在分布式通訊領域中,訊息系統一般有兩種典型的模式。一種是點對點模式(p2p,point to point),另一種是發布訂閱模式(pub/sub,publish/subscribe)。接下來,我們就一起看看這兩種模式,以幫助你深入理解發布訂閱模式的原理。

點對點模式

生產者將訊息傳送到訊息中心,然後消費者從訊息中心取出對應的訊息進行消費。訊息被消費後,訊息中心不再儲存該訊息,因此其他消費者無法再消費該訊息。也就是說,點對點模式雖然支援多個消費者,但乙個訊息只能被乙個消費者消費,不允許重複消費。

這種模式就好比,限定了每篇**只能被乙個使用者消費,比如現在有一篇分布式相關的**,這篇**推送給學生 a 之後,****就必須將其刪除或下架,也就是說其他使用者無法再獲取或閱讀該**了。

發布訂閱模式

生產者可以傳送訊息到訊息中心,而訊息中心通常以主題(topic)進行劃分,每條訊息都會有相應的主題,訊息會被儲存到自己所屬的主題中,訂閱該主題的所有消費者均可獲得該訊息進行消費。

比如圖中假設生產者 1 發布乙個 topic 相關資料或訊息,消費者 1~3 均訂閱了該 topic 訊息,則該訊息會推送消費者 1~3,也就是說同乙個訊息被 3 個消費者消費了。

這種模式就好比,不同的方向代表不同的主題,比如分布式領域代表乙個主題,當會議方或出版社發布分布式相關的**時,該**會被儲存到****的分布式主題下,同時學生或老師也會根據自己感興趣的主題進行訂閱。如果學生 a 訂閱了分布式主題,那麼當會議方或出版社發布分布式相關的**後,會議**會將這些**推送給學生 a。

與點對點模式相比,發布訂閱模式中乙個訊息可以被多個消費者進行消費,這也是和點對點模式的本質區別。

kafka是一種典型的發布訂閱訊息系統,其系統架構也是包括生產者、消費者和訊息中心三部分。

在kafka 中,訊息中心本質上就是一組伺服器,也可以說是 kafka 集群

kafka 的架構圖,如下所示:

可以看到,kafka 中除了 producer、broker、consumer 之外,還有乙個zookeeper集群:

從上面的介紹可以看出,broker 負責儲存訊息資料consumer 負責消費資料若 consumer 消費太慢,會導致 broker 儲存溢位broker 就會丟棄一部分訊息。因此,broker 和 consumer 是 kafka 的核心。接下來,我將帶你進一步了解 kafka 中 broker 和 consumer 的關鍵技術,如下圖所示:

假設在電商購物平台中,使用者首先在訂單系統下單,下單後庫存系統會進行出貨,通知系統則負責通知使用者,整個流程可以用發布訂閱的模式進行,如下圖所示:

發布訂閱模式的關鍵特徵:

redis訂閱發布機制實現分布式鎖

通常情況在解決分布式場景鎖機制都會首先想到redis。因為redis單執行緒天然就解決了這個問題。使用redis實現分布式鎖可以通過getset和setnx。redis getset db mongodb 沒有舊值,返回 nil nil redis get db mongodb redis gets...

分布式通訊方式 分布式訊息傳遞

談到系統間的協作,目前常用兩種方式 1 基於http協議 通過客戶端發起的get post請求,服務端接收request請求,處理請求,得到響應內容,通過網路傳送到客戶端,由瀏覽器解析出乙個視覺化的頁面。這種互動最大的優勢是實時性,通過http請求連線各個子系統,從而跨伺服器來完成乙個完整的業務流程...

分布式 eureka平滑發布

一.先聊聊eureke的server與client配置 server端 eureka.server.enable self preservation 設為false,關閉自我保護主要 eureka.server.eviction interval timer in ms 清理間隔 單位毫秒,預設是6...