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