2017-08-01 100 views
-1

我有一个场景,其中移动应用程序调用由我的应用程序托管的其余API。在这个过程中,我需要通过MQTT将消息发送到下游系统,并等待直到我收到该消息的响应。然后我回复到移动应用程序。使用Paho客户端的同步MQTT通信

这里面临的挑战是,MQTT上的消息传递是异步的。所以我收到的消息将在不同的线程中(某些监听器类,在messageArrived()上监听)。如何回到调用http线程?

我们有Paho库支持的同步通信吗?就像我发送消息,打开一些话题并等待,直到收到一些消息或超时?

+0

这是第二次在2天内询问这个类型的问题(https://stackoverflow.com/questions/45413507/handling-mqtt-communication-inside-http-request-in-node-red),它会不会发生某种类型的转让? – hardillb

+0

[在Node-Red中处理HTTP请求中的MQTT通信]的可能副本(https://stackoverflow.com/questions/45413507/handling-mqtt-communication-inside-http-request-in-node-red) –

+0

这是不是重复的,或者我将它标记为一个。其中一个对Node-RED非常具体,这是关于在最可能的java中实现类似的东西。 – hardillb

回答

-1

MQTT本质上是异步的,因为所有Pub/Sub实现都是异步的。没有在协议级别回复消息的概念,您无法知道您是否会收到发布消息的回复(或者您可能会收到很多回复),因为您无法知道是否还有您发布的主题的订阅者。

建立一个可以这种方式工作的系统是可能的,但是你需要维护一个状态机的所有请求,执行一个合理的超时策略,并计算出如果你得到多个响应时该怎么做。

你还没有提到你正在使用哪个不同的Paho库,但是我从方法名称中猜测出了Java,但是不知道你使用的是什么HTTP框架,以及其他一些因素,我不打算建议一个解决方案,特别是因为它会涉及大量的轮询和同步。

移动应用程序无法直接发布和订阅MQTT主题的原因是什么?这将消除对此的需要。

相关问题