我正在寻找一种从 MQTT 代理轮询消息的解决方案。我将在这里简要描述解决方案。
我们有一个基于 Spring 的控制器类,它公开 REST API 来处理某些与车辆相关的诊断数据。通过这些 API 之一,Notify3P()
我创建了一个 MQTT Java 客户端,并根据一些输入数据将消息发布到给定主题的 MQTT 代理。我的要求是每次客户端在 MQTT 上发布消息时通知第三方系统。
一旦收到通知,3P 系统就会从 MQTT 中提取消息。然后它需要通过getMessage()
REST API(我们需要在上面的控制器类上公开)从 MQTT 代理获取消息。getMessage()
API 需要轮询 MQTT 中已经发布的消息,并将其交给 3P 系统。postMessage()
然后,3P 系统将进行一些处理,并通过在我们的控制器类上公开的另一个 REST API 将响应发送回我们的系统。应该在 MQTTpostMessage()
上发布有关该主题的消息。response
我需要另一个 REST API checkResponse()
,然后轮询response
MQTT 的主题并将响应发送回客户端。
到目前为止我所做的:在应用程序启动时,我有一个启动 bean,它监听 MQTTrequest
和response
主题。现在我request
使用 REST API 将数据发布到主题Notify3P()
。我已经使用获取消息的启动 bean 附加了一个回调。当 3P 需要调用我的控制器来轮询来自 MQTT 的消息时,问题就出现了。
我不清楚如何在 MQTT 上保留消息并按需使用它。在 MQTT 中是否有一种机制可以做到这一点?此外,一旦 3P 系统response
再次发布消息,我如何轮询response
主题以获取来自 MQTT 的响应并发送给我的控制器的客户端?
我希望问题描述有意义。如果有人有任何解决方案,请发布。任何示例代码都会有很大帮助。
提前致谢!!