我有一个场景,移动应用程序调用我的应用程序托管的其他API。在这个过程中,我需要通过MQTT向下游系统发送消息,并等到我得到该消息的响应。然后我回复了移动应用程序。
这里的挑战是,MQTT上的消息传递是异步的。所以我收到的消息将在不同的线程(一些监听器类,监听messageArrived())。如何回到调用http线程?
Paho库是否支持同步通信?像我发送消息,打开一些主题并等待它直到收到一些消息或超时?
答案 0 :(得分:-1)
MQTT本质上是异步的,所有Pub / Sub实现都是异步的。在协议级别没有回复消息的概念,你无法知道你是否会得到一个已发布消息的响应(或者你可能得到很多),因为你不知道是否有一个订阅您发布的主题。
可以构建一个以这种方式工作的系统,但是您需要维护所有正在进行的请求的状态机,实施合理的超时策略并找出如果您收到多个响应该怎么做。
你还没有提到你正在使用哪个不同的Paho库,但是我从方法名称猜测Java,但是不知道你正在使用什么样的HTTP框架以及其他一些我不会建议的因素一个解决方案,特别是因为它将涉及大量的轮询和同步。
移动应用程序无法直接发布和订阅MQTT主题有什么理由吗?这将消除对此的需要。