我们拥有一个物联网基础设施,其中的设备通过 MQTT 进行通信。但是,现在我们还要求这些设备必须将传感器数据发布到队列中,以便云处理以评估和存储这些数据。
由于 MQTT 不支持拉动模型,我目前正在寻找可以使用的排队服务。ActiveMQ Artemis 引起了我的注意,因为它支持各种协议,其中包括 MQTT 和 REST 接口。
不过,我无法在文档中清楚地看到 Artemis 是否只能充当多个消息队列的单个代理,或者它是否真的可以用于在它们之间进行转换。到目前为止,计划是让一个 MQTT 客户端订阅“处理”主题,该主题将收集发布到它的所有消息并将它们推送到轮询队列,工作人员将在那里收集它们。似乎有可能 Artemis 可以在不运行其他服务的情况下做到这一点,但我完全不确定我对文档的解释是否正确。
所以问一个简单的问题:我可以装配 Artemis 以便我可以向其发布 MQTT 消息,然后从队列中轮询它们,例如使用 REST 接口吗?
答案1
通常,消息代理用于应用程序集成。因此,您通常可以使用一种协议发送消息,然后使用另一种协议使用它们。ActiveMQ Artemis 就是这种情况。您当然可以使用 MQTT 发布消息,然后使用 REST 接口使用它。
话虽如此,我还是建议使用 STOMP 协议而不是 REST 接口。STOMP 协议是标准化的,而 REST 接口是 ActiveMQ Artemis 独有的。STOMP 非常简单,可以在大多数(如果不是全部)使用 REST 消息客户端的地方使用。许多代理都实现了 STOMP,因此如果您需要迁移到其他代理,这项工作将变得容易得多。