0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

給我兩分鐘,搞懂發(fā)布-訂閱模式很輕松!

億佰特物聯(lián)網(wǎng)應(yīng)用專(zhuān)家 ? 2024-10-25 08:06 ? 次閱讀

什么是發(fā)布/訂閱模式?

舉一個(gè)生活中常見(jiàn)的例子說(shuō)明:小李到某房產(chǎn)中介提出租房需求,根據(jù)需求,房產(chǎn)中介將之前房東發(fā)布的出租信息提供給小李選擇,小李確定租房后,中介會(huì)將信息同步給房東知曉。這是一個(gè)典型的發(fā)布/訂閱模式。房東可以看作是發(fā)布者,租戶(hù)看作是訂閱者,房產(chǎn)中介作為消息代理,發(fā)布者和訂閱者之間通過(guò)消息代理進(jìn)行間接通信。

eb09ba72-9264-11ef-b5cd-92fbcf53809c.png

發(fā)布-訂閱模式演示(租房)

發(fā)布/訂閱模式特點(diǎn):
①解耦:發(fā)布者和訂閱者之間沒(méi)有直接聯(lián)系,它們通過(guò)中間的消息代理(如消息隊(duì)列或事件總線(xiàn))進(jìn)行通信。這種解耦使得系統(tǒng)更加靈活,可以獨(dú)立地添加或移除發(fā)布者和訂閱者,而不會(huì)影響其他組件。②異步通信:發(fā)布者發(fā)布消息后不需要等待響應(yīng),可以繼續(xù)執(zhí)行其他任務(wù)。訂閱者可以在方便的時(shí)候處理接收到的消息,不必立即響應(yīng)。③一對(duì)多通信:一個(gè)發(fā)布者可以向多個(gè)訂閱者發(fā)送消息。多個(gè)發(fā)布者也可以向同一個(gè)主題發(fā)布消息,所有訂閱該主題的訂閱者都會(huì)收到這些消息。④動(dòng)態(tài)訂閱:訂閱者可以在運(yùn)行時(shí)動(dòng)態(tài)地訂閱或取消訂閱某個(gè)主題。這種靈活性使得系統(tǒng)能夠適應(yīng)不斷變化的需求。⑤廣播機(jī)制:消息會(huì)被廣播到所有訂閱了該主題的訂閱者。每個(gè)訂閱者都可以獨(dú)立處理消息,互不影響。

發(fā)布/訂閱(Pub/Sub,即Publish/Subscribe)是分布式系統(tǒng)中用于不同組件或服務(wù)之間異步通信的一種架構(gòu)設(shè)計(jì)模式。盡管發(fā)布/訂閱基于消息隊(duì)列和事件代理等早期設(shè)計(jì)模式,但它更加靈活和可擴(kuò)展。其關(guān)鍵在于,發(fā)布/訂閱允許在系統(tǒng)的不同組件之間傳遞消息,而這些組件之間無(wú)需知道彼此的身份(即它們是解耦的)。發(fā)布/訂閱模式的出現(xiàn)源于擴(kuò)大信息系統(tǒng)規(guī)模的必要性。在互聯(lián)網(wǎng)時(shí)代之前,甚至在互聯(lián)網(wǎng)發(fā)展的初期,系統(tǒng)大多是通過(guò)靜態(tài)方式擴(kuò)展的。然而,隨著互聯(lián)網(wǎng)的擴(kuò)張和基于Web的應(yīng)用程序的普及,以及移動(dòng)設(shè)備和物聯(lián)網(wǎng)設(shè)備的廣泛應(yīng)用,系統(tǒng)需要?jiǎng)討B(tài)地?cái)U(kuò)展。發(fā)布/訂閱模式的解耦特性使其成為管理動(dòng)態(tài)可擴(kuò)展系統(tǒng)架構(gòu)的理想選擇。發(fā)布/訂閱使得在不增加系統(tǒng)組件程序邏輯負(fù)擔(dān)的情況下管理擴(kuò)展成為可能。

Pub/Sub架構(gòu)

Pub/Sub提供了一個(gè)框架,用于在發(fā)布者(創(chuàng)建和發(fā)送消息的組件)和訂閱者(接收和使用消息的組件)之間交換消息。請(qǐng)注意,發(fā)布者不會(huì)以點(diǎn)對(duì)點(diǎn)方式向特定訂閱者發(fā)送消息。相反,使用中介-Pub/Sub消息代理,它將消息分組為稱(chēng)為通道(或主題)的實(shí)體。

發(fā)布/訂閱模型工作原理? 訂閱者首先會(huì)選擇訂閱特定的主題,以便能夠接收該主題下的所有消息。? 隨后,發(fā)布者會(huì)向這些已選定的主題發(fā)送消息,這些消息包含了需要傳遞的信息或指令。? 消息代理作為核心中介,接收來(lái)自發(fā)布者的消息,并將其存儲(chǔ)在對(duì)應(yīng)的主題中。同時(shí),代理還會(huì)負(fù)責(zé)將這些消息分發(fā)給所有已訂閱該主題的訂閱者。

eb466f08-9264-11ef-b5cd-92fbcf53809c.png

發(fā)布-訂閱模式

舉例說(shuō)明:
為了更具體地理解Pub/Sub系統(tǒng)的操作,我們可以考慮以下實(shí)際場(chǎng)景。設(shè)想在家中,你安裝了一系列IoT設(shè)備,這些設(shè)備負(fù)責(zé)監(jiān)測(cè)煙霧濃度并控制電力與天然氣的供應(yīng)。為了確保這些設(shè)備之間能夠順暢且可靠地通信,你可以采用MQTT代理作為消息傳遞的中心樞紐。在這個(gè)場(chǎng)景中,一旦煙霧檢測(cè)設(shè)備(作為發(fā)布者)偵測(cè)到煙霧并判定為警報(bào)狀態(tài),它會(huì)立即向MQTT代理發(fā)送一條包含警報(bào)信息的消息。而你的智能手機(jī)(作為訂閱者之一)已經(jīng)訂閱了相關(guān)的煙霧警報(bào)主題,因此會(huì)立即接收到這條消息,并通知你家中存在煙霧。值得注意的是,Pub/Sub模型的靈活性還體現(xiàn)在訂閱者也能轉(zhuǎn)變?yōu)榘l(fā)布者的能力上。例如,你的智能手機(jī)在接收到煙霧警報(bào)后,可以作為一個(gè)發(fā)布者,向另一個(gè)特定主題發(fā)送關(guān)閉電力和天然氣供應(yīng)的指令消息。此時(shí),負(fù)責(zé)控制電力和天然氣供應(yīng)的IoT設(shè)備(作為訂閱者)會(huì)接收到這條指令,并據(jù)此執(zhí)行關(guān)閉操作,以確保家庭安全。通過(guò)這樣的方式,即便只發(fā)送了一條消息,也能觸發(fā)兩個(gè)獨(dú)立的IoT設(shè)備同時(shí)做出響應(yīng),從而實(shí)現(xiàn)了高效的跨設(shè)備通信與協(xié)同工作。

Pub/Sub模型有哪些優(yōu)勢(shì)?

Pub/Sub模式為表帶來(lái)了許多好處,如:

? 組件之間的松散耦合,使你的系統(tǒng)更加模塊化和靈活。

? 高可擴(kuò)展性(理論上,Pub/Sub允許任意數(shù)量的發(fā)布者與任意數(shù)量的訂閱者通信)。

? 與語(yǔ)言和協(xié)議無(wú)關(guān),這使得將Pub/Sub集成到你的技術(shù)堆棧中變得簡(jiǎn)單快捷。

? 異步、事件驅(qū)動(dòng)型通信,非常適合實(shí)時(shí)、低延遲的應(yīng)用程序。

eb9a9f24-9264-11ef-b5cd-92fbcf53809c.png

何時(shí)應(yīng)使用Pub/Sub模式?

Pub/Sub的松散耦合、異步特性和固有的可擴(kuò)展性使其成為發(fā)布者和訂閱者數(shù)量較高且波動(dòng)的分布式系統(tǒng)的絕佳解決方案。你可以將Pub/Sub用于許多不同的目的,例如:

? 發(fā)送事件通知

? 分布式緩存

? 分布式日志記錄

? 使用多個(gè)數(shù)據(jù)源

? 廣播更新(一對(duì)多消息傳送)

? 構(gòu)建響應(yīng)式、低延遲的最終用戶(hù)體驗(yàn),例如實(shí)時(shí)聊天和多人游戲協(xié)作功能

應(yīng)用場(chǎng)景

①事件驅(qū)動(dòng)架構(gòu):在微服務(wù)架構(gòu)中,不同服務(wù)可以通過(guò)發(fā)布-訂閱模式來(lái)交換事件,實(shí)現(xiàn)松耦合的通信。例如,訂單服務(wù)可以發(fā)布“訂單創(chuàng)建”事件,庫(kù)存服務(wù)和支付服務(wù)可以訂閱該事件并相應(yīng)地更新庫(kù)存和處理支付。②實(shí)時(shí)通知:在社交網(wǎng)絡(luò)應(yīng)用中,用戶(hù)可以訂閱他們感興趣的話(huà)題或用戶(hù),當(dāng)有新的內(nèi)容發(fā)布時(shí),系統(tǒng)可以實(shí)時(shí)通知訂閱者。例如,微博、小紅書(shū)等社交媒體平臺(tái)使用發(fā)布-訂閱模式來(lái)推送新博文/筆記、評(píng)論和點(diǎn)贊通知等。③日志和監(jiān)控:系統(tǒng)中的各個(gè)組件可以發(fā)布日志和監(jiān)控?cái)?shù)據(jù),中央日志系統(tǒng)和監(jiān)控系統(tǒng)可以訂閱這些數(shù)據(jù),進(jìn)行集中處理和分析。例如,ELK Stack(Elasticsearch, Logstash, Kibana)和Prometheus等工具可以利用發(fā)布-訂閱模式來(lái)收集和處理日志和監(jiān)控?cái)?shù)據(jù)。④物聯(lián)網(wǎng):在物聯(lián)網(wǎng)應(yīng)用中,設(shè)備可以發(fā)布傳感器數(shù)據(jù),中央控制系統(tǒng)和其他設(shè)備可以訂閱這些數(shù)據(jù),進(jìn)行實(shí)時(shí)處理和響應(yīng)(如前面所舉煙霧報(bào)警的例子)。

產(chǎn)品推薦

ebdb52b2-9264-11ef-b5cd-92fbcf53809c.png億佰特串口服務(wù)器產(chǎn)品涵蓋單串口服務(wù)器、多串口服務(wù)器、Wi-Fi串口服務(wù)器以及串口服務(wù)器模組等,可提供串口轉(zhuǎn)網(wǎng)絡(luò)功能,能夠?qū)⒋跀?shù)據(jù)轉(zhuǎn)換成TCP/IP協(xié)議數(shù)據(jù),實(shí)現(xiàn)串口與網(wǎng)絡(luò)的雙向透明傳輸。被廣泛應(yīng)用于考勤系統(tǒng)、機(jī)房監(jiān)控、電力監(jiān)控等場(chǎng)景。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 異步通信
    +關(guān)注

    關(guān)注

    1

    文章

    57

    瀏覽量

    10104
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3073

    瀏覽量

    48587
  • 分布式系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    19183
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么Xtr111輸出短路時(shí)沒(méi)有產(chǎn)生保護(hù)動(dòng)作?

    =4.5V, Xtr 111沒(méi)有發(fā)生輸出開(kāi)路時(shí)的保護(hù)動(dòng)作,還保持正常工作狀態(tài),這跟數(shù)據(jù)手冊(cè)描述的不一樣。 輸出短路兩分鐘以后兩分鐘以后解除短路,輸出線(xiàn)路串入300歐電阻, Xtr 111能正常工作。 為什么輸出短路時(shí)沒(méi)有產(chǎn)生保護(hù)動(dòng)作?
    發(fā)表于 08-09 07:53

    使用OPA615進(jìn)行峰值保持電路設(shè)計(jì),輸出的保持信號(hào)在兩分鐘中內(nèi)會(huì)有0.1V左右的衰減,為什么?

    采用如圖所示的保持電路,保持信號(hào)為1V 1Khz 15ns脈寬的單脈沖信號(hào),在實(shí)際電路中發(fā)現(xiàn),電路通電后,輸出的保持信號(hào)在兩分鐘中內(nèi)會(huì)有0.1V左右的衰減,出現(xiàn)這樣的一個(gè)漸變的過(guò)程,之后電路輸出信號(hào)才會(huì)保持穩(wěn)定。每次剛通電都會(huì)有這樣的現(xiàn)象出現(xiàn),請(qǐng)問(wèn)是什么原因造成的?
    發(fā)表于 08-13 07:15

    跪求單片機(jī)C程序,急需

    用51單片機(jī)編寫(xiě)10分鐘倒計(jì)時(shí),最后兩分鐘蜂鳴器提示,到時(shí)間蜂鳴器提醒,求求啦,急需{:4:}
    發(fā)表于 10-26 19:48

    急需單片機(jī)10分鐘倒計(jì)時(shí)C程序,急需,求求啦

    用51單片機(jī)編寫(xiě)10分鐘倒計(jì)時(shí),最后兩分鐘蜂鳴器提示,到時(shí)間蜂鳴器提醒,求求啦,急需
    發(fā)表于 10-26 19:56

    有誰(shuí)做過(guò)51直流數(shù)控電源嗎?

    本帖最后由 14jxu 于 2015-8-19 23:09 編輯 我用7805 將15V穩(wěn)壓成5V輸出給單片機(jī)、DA、AD、和數(shù)碼管,但是7805沒(méi)兩分鐘就受不了了,當(dāng)我沒(méi)接數(shù)碼管的時(shí)候可以挺久點(diǎn)。我開(kāi)始以為是國(guó)產(chǎn)芯片的問(wèn)題,換成12V輸入7805,但7812也是兩分鐘
    發(fā)表于 08-19 23:07

    周立功CAN通信做的labview為什么崩潰

    運(yùn)行兩分鐘,數(shù)據(jù)都是對(duì)的,然后就直接崩潰了,labview是2014中文版的
    發(fā)表于 11-08 11:32

    MQTT協(xié)議介紹之一:發(fā)布/訂閱

    ,MQTT被正式批準(zhǔn)為OASIS標(biāo)準(zhǔn)。 MQTT 3.1.1現(xiàn)在是該協(xié)議的最新版本。發(fā)布/訂閱模式發(fā)布/訂閱
    發(fā)表于 08-25 19:58

    關(guān)于labview定時(shí)采集和取值問(wèn)題

    利用9213板卡采集溫度,要求:1.每兩分鐘測(cè)量一次,2.測(cè)量五次,3.取平均值,備注:除過(guò)DAQ助手中的定時(shí)周期,因?yàn)榘蹇ㄉ嫌?b class='flag-5'>兩個(gè)通道是需要高速采集的,不能直接加定時(shí)來(lái)做這個(gè)。利用PLC來(lái)做的話(huà)
    發(fā)表于 03-15 17:10

    Redis的發(fā)布訂閱機(jī)制

    Redis之發(fā)布訂閱機(jī)制
    發(fā)表于 06-11 13:21

    單片機(jī)為什么要使用C語(yǔ)言呢?

    單片機(jī)為什么要使用C語(yǔ)言呢?創(chuàng)客學(xué)院兩分鐘帶你搞懂將C向MCU(俗稱(chēng)單片機(jī))8051上的移植始于80年代的中后期??陀^上講,C向8051 MCU移植的難點(diǎn)不少。如:8051的非馮·諾依慢結(jié)構(gòu)(程序
    發(fā)表于 07-15 06:11

    ad7190連續(xù)轉(zhuǎn)換模式讀取一段時(shí)間的數(shù)據(jù)后出錯(cuò)

    AD7190復(fù)位后,各個(gè)寄存器可以正常讀取,但連續(xù)采了一兩分鐘的ADC數(shù)據(jù)后又出現(xiàn)同樣的問(wèn)題,請(qǐng)問(wèn)各位大佬有沒(méi)有什么解決方法。
    發(fā)表于 09-18 11:37

    AD7190連續(xù)轉(zhuǎn)換模式采了一分鐘數(shù)據(jù)后出現(xiàn)異常怎么解決?

    AD7190復(fù)位后,各個(gè)寄存器可以正常讀取,但連續(xù)采了一兩分鐘的ADC數(shù)據(jù)后又出現(xiàn)同樣的問(wèn)題,請(qǐng)問(wèn)各位大佬有沒(méi)有什么解決方法。
    發(fā)表于 12-01 07:47

    兩分鐘帶你了解食材凈化機(jī)

    身邊很多熱愛(ài)美食的朋友面對(duì)廚房都有幾個(gè)恐懼:洗菜和洗碗,所幸的是,這個(gè)工作現(xiàn)在都可以交給機(jī)器來(lái)做了,它們就是食材凈化機(jī)和洗碗機(jī)。咱們今天就來(lái)聊聊食材凈化機(jī)。使用食材凈化機(jī)的理由有個(gè),第一:一鍵
    發(fā)表于 01-16 16:14 ?1773次閱讀

    如何測(cè)試紫外線(xiàn)LED

      請(qǐng)等待一兩分鐘,并打開(kāi)LED。最好不要在沒(méi)有護(hù)目鏡的情況下看著它們。
    的頭像 發(fā)表于 09-26 14:38 ?6853次閱讀
    如何測(cè)試紫外線(xiàn)LED

    摩托羅拉edge S開(kāi)售兩分鐘銷(xiāo)量突破萬(wàn)臺(tái)

    前不久摩托羅拉發(fā)布了自己的edge S手機(jī),這款手機(jī)可以說(shuō)是一鳴驚人,在發(fā)售的時(shí)候也拿到了很好的成績(jī)。根據(jù)摩托羅拉官方宣稱(chēng),摩托羅拉edge S手機(jī)在開(kāi)售兩分鐘后隨即宣告售罄。這也是摩托羅拉進(jìn)入國(guó)內(nèi)市場(chǎng)以來(lái)取得的比較大的勝利。
    的頭像 發(fā)表于 02-05 11:39 ?3048次閱讀