RabbitMQ和IoT设备:保持队列开放吗?

时间:2018-11-09 19:46:35

标签: rabbitmq

我们在一个新项目中使用RabbitMQ。我们将使IoT设备与队列进行通信。

对于将信息发送到云的设备,我们看不到任何问题,但是有时我们需要将消息从后端传递到IoT设备。为此,我们让设备打开一个排他队列。只要设备处于在线状态,它就可以完美运行。如果不是,则关闭队列,并且不再有消息可以发送给它。

有没有一种方法可以使队列保持打开状态,以便消息一直保留到IoT设备重新联机?

反之亦然:有什么方法可以确保从IoT设备开始交付。例如:每15分钟测量一次能量。如果连接断开,则消息应存储在磁盘上(以防止断电时消息丢失)。连接稍后重新联机时,将发送它们。是否存在实现此功能的服务或客户端库,还是我们需要自己开发此库?

2 个答案:

答案 0 :(得分:0)

  

有没有办法使队列保持打开状态,因此消息会一直保留到   物联网设备重新联机?

使用常规队列,如果您希望它在RabbitMQ重新启动后仍然存在,请确保其持久性。

  

是否有某种方法可以确保从IoT开始交付   设备。

这取决于您使用的库,但是您没有告诉我们您使用的是哪个库,也不使用什么协议(例如,AMQP vs MQTT)。

某些库提供了自动重新连接和重新创建拓扑(队列,交换等)的功能,但是直到代理再次可用之前,我还不知道任何提供本地消息存储的库。您必须自己编写代码。

请仔细阅读有关发布者确认和消费者确认的文档,因为它们对于可靠的消息传递link都是必不可少的。


注意: RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。

答案 1 :(得分:0)

我们的云具有分配给一组IoT设备的称为CredentialsBucket的多个交换和凭证。 IoT设备注册时,我们会向他们提供此凭证,其中包括持久队列和交换。物联网设备推送消息时,它将通过交换机进入云,在此我们使用HMAC进行其他安全检查。 当Cloud发送消息时,它将消息直接发送到他的队列(在我们的案例中没有持久消息),而IoT设备执行相同的安全检查。