有没有办法使用 mosca MQTT 实现请求响应模式,以“检查客户端的回复,如果在预期时间内未收到预期回复,则重新发布”。
我相信这在 Mqtt 5 中是可能的,但截至目前,我必须使用 QoS 1 的 Mosca 代理(支持直到 Mqtt 3.1.1)
我正在寻找 Node js 解决方法来实现这一目标。
根据我的评论,您可以使用任何 MQTT 代理实现请求-响应模式,但在 v5 之前,您需要自己实现(要么有一个回复主题和一个消息 ID,要么包含一个特定的回复主题)在每条消息中)。
由于 MQTT 3.11 本身不直接提供此功能,并且 MQTT 有效负载没有标准格式(只有一些字节!),因此不可能提出通用实现(请求中需要某种唯一的 ID)。 MQTT v5 中通过包含以下内容的功能解决了这个问题特性 https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Properties包括回应主题 https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901114 and 相关数据 https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901115。对于早期版本,您必须在有效负载中添加一些额外的信息(使用您选择的任何编码机制)。
有一些 Stack Overflow 问题可能会提供一些见解:
- 请求/响应的 MQTT 主题名称 https://stackoverflow.com/questions/56392645/mqtt-topic-names-for-request-response
- 使用 MQTT 的 RPC 风格请求 https://stackoverflow.com/questions/20483012/rpc-style-request-with-mqtt
其他文章:
- 日食库拉 https://eclipse.github.io/kura/ref/mqtt-namespace.html#mqtt-requestresponse-conversations
- 股票浏览器 https://www.codeproject.com/Articles/1159256/Stock-Explorer-Using-Pub-Sub-for-Request-Response
-
(学术文章 - 需要购买才能阅读整篇文章)。
-
Amazon 设备影子 MQTT 主题 https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html(例如发送消息至
$aws/things/thingName/shadow/get
AWS IoT 响应/get/accepted
or /get/rejected
).
以下是一些节点包(注意:这些包已经有一段时间没有更新了,我也没有审查代码):
- replyer https://github.com/jsdario/replyer
- resmetry https://github.com/mohdrashid/resmetry
即使使用 MQTT v5,您也需要自己实现空闲超时位。如果您使用 QOS 1/2,那么代理将负责重新发送消息(直到收到 PUBACK/PUBCOMP),因此重新发送消息可能会适得其反(当通信链路关闭时,大量相同的消息排队等待)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)