许多消息队列旨在为您的应用程序提供轻量级的发布/订阅消息传输协议。为什么以及何时在您的物联网项目中使用消息队列?
考虑温室中的温度传感器,它测量温度。您的应用程序可以在15分钟的时间间隔内(每天月96次)将温度发送到消息队列。而不是处理温室中的数据并始终连接。
物联网的消息队列旨在提供轻量级的发布/订阅消息传输。您只需发送数据并在另一项服务中处理数据,而不是保留处理温室数据的应用程序。这需要较少的网络带宽,这可能会限制您的传感器,或者您的传感器通过卫星链路进行通信。
消息队列使您的应用程序具有低功耗,发送最小化的数据包,并有效地将信息分发给一个或多个接收器。
物联网项目中的消息队列
消息队列是一种服务到服务通信的方式。它允许应用程序通过相互发送消息进行通信。消息队列的基本体系结构很简单,有些客户端应用程序可以创建消息并将它们传递到消息队列。其他应用程序/服务从队列中检索消息并处理消息中包含的请求和信息
消息可以包含任何类型的信息。例如,它可以获得有关应该从另一个应用程序(可能位于其他位置)开始的进程/任务的消息,或者它可能只是需要处理的数据。
物联网和异步消息
因特网 应用程序被动反应和异步是一个“必须”。大多数IoT应用程序应该能够处理来自设备的许多连接以及从中过去的所有消息
异步消息传递在机器到机器通信中被广泛使用。这以为这发送方不会期望立即相应,并且发送方在等待相应是时不会“阻止”任何内容。
异步通信可以实现灵活性,应用程序可以发送消息,然后继续处理其他事情-在同步通信中,它必须等待实时响应。您可以将消息写入队列,然后让相同的业务员逻辑发生,而不是调用Web服务并等待它完成。
在您的应用程序需要完成某些操作但不需要立即完成,或者甚至不关心结果的情况下,队列可能很棒。
解耦
消息队列可用于实现解耦,并有助于保持结构的灵活性。它使得用不同语言编写的两个不同的应用程序连接在一起非常容易。
消息队列允许每个组件独立地执行其任务-它允许组件保持完全自治并且彼此不知道,一项服务的更改不应要求更改其他服务。它是分离服务的过程因此它们的功能更加独立。
冗余和弹性
应用程序有时会崩溃 - 它会发生。这可能是由于超时或您的代码中只有错误影响整个应用程序。消息队列强制可以使接收应用程序确认它已完成任务,并且可以安全地从队列中删除该任务。如果接收应用程序中的任何内容失败,该消息将保留在队列中。
当目标程序繁忙或未连接时,消息队列提供临时消息存储。
通过打破您的应用程序并按队列分隔不同的组件,您固有地创建了更多的弹性。即使部分后端处理延迟,您的应用程序仍然可以运行。
交通高峰
许多应用程序的流量激增。门铃应用程序,让您可以从任何地方回答您的门,万圣节期间可能会有交通高峰,而购物应用程序可能会在黑色星期五有交通高峰。通过对数据进行排队,您可以确保最终保留和处理您的数据; 即使这意味着由于高流量峰值,它需要比平常更长的时间。
使用RabbitMQ对IoT进行消息队列排队
有一些IoT通信协议和标准旨在简化物联网设计。如果您考虑基于队列的解决方案,CloudAMQP会提供两种最流行的开放式消息传递协议;AMQP和MQTT通过RabbitMQ。
AMQP是一种安全可靠的协议,开销低,非常适合物联网应用,AMQP是一种比MQTT更先进的协议,更可靠,更好的支持安全性。AMQP还具有灵活路由,持久和持久队列,群集,联合和高可用性队列等功能。缺点是它是一个更冗长的协议-取决于您如何实施您的解决方案。
MQTT是为物联网设计的另一种协议。MQTT宣传的物联网优势仅适用于功耗极地的设备。MQTT非常节能 ,它非常注重最小的线路占用空间。由于其简单性,在客户端上实现MQTT所需的工作量比AMQP要少。但是MQTT缺少从服务器到客户端的授权和错误通知,这是一个很大的限制。
RabbitMQ是一个消息队列软件,称为消息代理或队列管理器,简单地说,它是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到队列上。