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