消息队列系列二(IOT中消息队列的应用)
許多消息隊(duì)列旨在為您的應(yīng)用程序提供輕量級(jí)的發(fā)布/訂閱消息傳輸協(xié)議。為什么以及何時(shí)在您的物聯(lián)網(wǎng)項(xiàng)目中使用消息隊(duì)列?
考慮溫室中的溫度傳感器,它測(cè)量溫度。您的應(yīng)用程序可以在15分鐘的時(shí)間間隔內(nèi)(每天月96次)將溫度發(fā)送到消息隊(duì)列。而不是處理溫室中的數(shù)據(jù)并始終連接。
物聯(lián)網(wǎng)的消息隊(duì)列旨在提供輕量級(jí)的發(fā)布/訂閱消息傳輸。您只需發(fā)送數(shù)據(jù)并在另一項(xiàng)服務(wù)中處理數(shù)據(jù),而不是保留處理溫室數(shù)據(jù)的應(yīng)用程序。這需要較少的網(wǎng)絡(luò)帶寬,這可能會(huì)限制您的傳感器,或者您的傳感器通過衛(wèi)星鏈路進(jìn)行通信。
消息隊(duì)列使您的應(yīng)用程序具有低功耗,發(fā)送最小化的數(shù)據(jù)包,并有效地將信息分發(fā)給一個(gè)或多個(gè)接收器。
物聯(lián)網(wǎng)項(xiàng)目中的消息隊(duì)列
消息隊(duì)列是一種服務(wù)到服務(wù)通信的方式。它允許應(yīng)用程序通過相互發(fā)送消息進(jìn)行通信。消息隊(duì)列的基本體系結(jié)構(gòu)很簡(jiǎn)單,有些客戶端應(yīng)用程序可以創(chuàng)建消息并將它們傳遞到消息隊(duì)列。其他應(yīng)用程序/服務(wù)從隊(duì)列中檢索消息并處理消息中包含的請(qǐng)求和信息
消息可以包含任何類型的信息。例如,它可以獲得有關(guān)應(yīng)該從另一個(gè)應(yīng)用程序(可能位于其他位置)開始的進(jìn)程/任務(wù)的消息,或者它可能只是需要處理的數(shù)據(jù)。
物聯(lián)網(wǎng)和異步消息
因特網(wǎng) 應(yīng)用程序被動(dòng)反應(yīng)和異步是一個(gè)“必須”。大多數(shù)IoT應(yīng)用程序應(yīng)該能夠處理來自設(shè)備的許多連接以及從中過去的所有消息
異步消息傳遞在機(jī)器到機(jī)器通信中被廣泛使用。這以為這發(fā)送方不會(huì)期望立即相應(yīng),并且發(fā)送方在等待相應(yīng)是時(shí)不會(huì)“阻止”任何內(nèi)容。
異步通信可以實(shí)現(xiàn)靈活性,應(yīng)用程序可以發(fā)送消息,然后繼續(xù)處理其他事情-在同步通信中,它必須等待實(shí)時(shí)響應(yīng)。您可以將消息寫入隊(duì)列,然后讓相同的業(yè)務(wù)員邏輯發(fā)生,而不是調(diào)用Web服務(wù)并等待它完成。
在您的應(yīng)用程序需要完成某些操作但不需要立即完成,或者甚至不關(guān)心結(jié)果的情況下,隊(duì)列可能很棒。
解耦
消息隊(duì)列可用于實(shí)現(xiàn)解耦,并有助于保持結(jié)構(gòu)的靈活性。它使得用不同語(yǔ)言編寫的兩個(gè)不同的應(yīng)用程序連接在一起非常容易。
消息隊(duì)列允許每個(gè)組件獨(dú)立地執(zhí)行其任務(wù)-它允許組件保持完全自治并且彼此不知道,一項(xiàng)服務(wù)的更改不應(yīng)要求更改其他服務(wù)。它是分離服務(wù)的過程因此它們的功能更加獨(dú)立。
冗余和彈性
應(yīng)用程序有時(shí)會(huì)崩潰 - 它會(huì)發(fā)生。這可能是由于超時(shí)或您的代碼中只有錯(cuò)誤影響整個(gè)應(yīng)用程序。消息隊(duì)列強(qiáng)制可以使接收應(yīng)用程序確認(rèn)它已完成任務(wù),并且可以安全地從隊(duì)列中刪除該任務(wù)。如果接收應(yīng)用程序中的任何內(nèi)容失敗,該消息將保留在隊(duì)列中。
當(dāng)目標(biāo)程序繁忙或未連接時(shí),消息隊(duì)列提供臨時(shí)消息存儲(chǔ)。
通過打破您的應(yīng)用程序并按隊(duì)列分隔不同的組件,您固有地創(chuàng)建了更多的彈性。即使部分后端處理延遲,您的應(yīng)用程序仍然可以運(yùn)行。
交通高峰
許多應(yīng)用程序的流量激增。門鈴應(yīng)用程序,讓您可以從任何地方回答您的門,萬圣節(jié)期間可能會(huì)有交通高峰,而購(gòu)物應(yīng)用程序可能會(huì)在黑色星期五有交通高峰。通過對(duì)數(shù)據(jù)進(jìn)行排隊(duì),您可以確保最終保留和處理您的數(shù)據(jù); 即使這意味著由于高流量峰值,它需要比平常更長(zhǎng)的時(shí)間。
使用RabbitMQ對(duì)IoT進(jìn)行消息隊(duì)列排隊(duì)
有一些IoT通信協(xié)議和標(biāo)準(zhǔn)旨在簡(jiǎn)化物聯(lián)網(wǎng)設(shè)計(jì)。如果您考慮基于隊(duì)列的解決方案,CloudAMQP會(huì)提供兩種最流行的開放式消息傳遞協(xié)議;AMQP和MQTT通過RabbitMQ。
AMQP是一種安全可靠的協(xié)議,開銷低,非常適合物聯(lián)網(wǎng)應(yīng)用,AMQP是一種比MQTT更先進(jìn)的協(xié)議,更可靠,更好的支持安全性。AMQP還具有靈活路由,持久和持久隊(duì)列,群集,聯(lián)合和高可用性隊(duì)列等功能。缺點(diǎn)是它是一個(gè)更冗長(zhǎng)的協(xié)議-取決于您如何實(shí)施您的解決方案。
MQTT是為物聯(lián)網(wǎng)設(shè)計(jì)的另一種協(xié)議。MQTT宣傳的物聯(lián)網(wǎng)優(yōu)勢(shì)僅適用于功耗極地的設(shè)備。MQTT非常節(jié)能 ,它非常注重最小的線路占用空間。由于其簡(jiǎn)單性,在客戶端上實(shí)現(xiàn)MQTT所需的工作量比AMQP要少。但是MQTT缺少?gòu)姆?wù)器到客戶端的授權(quán)和錯(cuò)誤通知,這是一個(gè)很大的限制。
RabbitMQ是一個(gè)消息隊(duì)列軟件,稱為消息代理或隊(duì)列管理器,簡(jiǎn)單地說,它是一個(gè)可以定義隊(duì)列的軟件,應(yīng)用程序可以連接到隊(duì)列并將消息傳輸?shù)疥?duì)列上。
總結(jié)
以上是生活随笔為你收集整理的消息队列系列二(IOT中消息队列的应用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python开发培训前景如何?
- 下一篇: zabbix源码安装 令人窒息的操作