使用 mosca MQTT 的请求响应模式

2024-05-15

有没有办法使用 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/getAWS 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(使用前将#替换为@)

使用 mosca MQTT 的请求响应模式 的相关文章

随机推荐

  • 如何使用 jquery.validation 插件不将错误元素显示为标签

    好吧 伙计们 我已经阅读了有关 jQuery 验证插件的所有其他帖子和问题 他们似乎没有我想要做的事情 我希望显示错误不与消息一起显示 而只是在输入字段周围创建一个红色边框 这里只是一些表格
  • 以任意顺序匹配可选捕获组

    在解析用户输入的许多情况下 用户有机会向输入添加几个可选标志 这些标志应该以任何顺序接受 如何使用正则表达式对其进行解析 以便每个标志都位于它自己的捕获组中 如果存在 例如 有一个必需的令牌a 然后是 3 个可选标记 可以按任何顺序出现b
  • 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    我的移动网络应用程序的一位用户抱怨说 每次他关闭手机屏幕后使用该应用程序时 他都必须重新登录该应用程序 发生的情况是 当屏幕关闭时 或者当您通过双击主页按钮并滑开 Safari 来完全关闭 Safari 时 Safari 会清除该网站的 C
  • WPF 中按钮的启用和禁用状态的不同图像

    我想根据按钮的状态更改下面代码中按钮的图像 即使用不同的图像来启用和禁用状态
  • 如何在 Google 地图 InfoWindow 中使用 Jquery?

    我想在 Google 地图 InfoWindow 中显示 jQuery 效果 显示和隐藏 div 我该怎么做 尽管我个人还没有尝试过 但这 gt http code google com p jquery ui map http code
  • Facebook SDK 登录/注销 ngrok

    我正在尝试将我正在构建的网络应用程序与 Facebook 集成 Facebook 现在要求所有 API 调用都必须从 https 站点进行 我正在构建的这个应用程序只是为了好玩 所以我使用的是 localhost 我在用着ngrok将我的请
  • 解决方案文件的修改权限

    我有用VS2005开发的项目解决方案 它绑定到 TFS Team Foundation Server 我想将解决方案转换为 VS2008 版本 保持绑定不变 但是在转换时出现错误 错误信息 解决方案文件 C abc abc sln 无法转换
  • Android Studio 模拟器未找到符号:_pwritev

    上次更新 Android 模拟器后 我无法启动任何虚拟设备 即使我创建了一个新的 模拟器显示几秒钟 然后出现错误 并且 macOS 在问题报告中显示 qemu system x86 64 意外退出 Dyld Error Message Sy
  • 带点 (.) 的 Spring MVC @PathVariable 被截断

    这是问题的延续Spring MVC PathVariable 被截断 https stackoverflow com questions 3526523 spring mvc pathvariable getting truncated S
  • IE 10 Javascript 错误未显示[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚将浏览器IE8升级到IE10 在 IE8 中任何java script发生错误 它显示在状态栏中 但是IE10错误未显示在状态栏中
  • 使用 Qt 上的看门狗更改 QLabel 文本

    我正在尝试做什么 每当在受监视的文件夹中创建新文件 使用 Watchdog 时 更改 QLabel 文本 Problem 使用以下代码创建新文件时 QLabel 文本不会更新 但成功调试打印到控制台 class MainWindow QtW
  • 如何在 Ionic 3 中调整图像大小而不降低质量和目标宽度和高度?

    我想减小相机 API 拍摄的图像的大小 但质量降低不好 最好的办法是降低分辨率 但我不想对所有图像使用目标宽度和高度 例如 我希望图像宽度为 1280 图像高度按其比例自动变化 但在 API 中我应该使用精确的宽度和高度 如何通过图像比例更
  • windows关闭tomcat后保持端口锁定

    我遇到了一个问题 该问题发生在不同站点的 3 台不同服务器上 问题是 当我关闭 Windows 服务器上的 Tomcat 7 和 8 5 版本 服务并尝试重新启动该服务后 该服务将无法启动 因为 tomcat 认为端口仍在使用中 以下是错误
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • 为什么 System.Math 有 Sin、Cos 等外部方法?

    MethodImpl MethodImplOptions InternalCall public static extern double Sin double a 其原因何在 MethodImplOptions InternalCall表
  • 必填字段验证器中的数字验证

    是否可以将数字验证放入 asp net 文本框中的必填字段验证器中 您应该使用比较验证器 http msdn microsoft com en us library system web ui webcontrols comparevali
  • 自动过滤/排序列表框项目 (Windows Phone)

    我想确保添加到列表框中的项目根据每个项目的序列号按升序排序 例如 1 项目 2 项目 4 项目 3 项目应根据其编号自动排序 1 2 3 10 这是 C 源代码 namespace XeroQuiz public partial class
  • 如何使用 webpack 正确捆绑 vscode 扩展

    我遇到的问题是当我跑步时vsce package我仍然明白This extension consists of 3587 separate files For performance reasons you should bundle yo
  • 调试器异常错误和内存超调

    我尝试运行以下代码 但它显示有关内存地址的错误 并显示一条消息 循环后 n 可能未定义 请看一看 var n max integer n integer r R1 f h0 Array of Real const h 0 00889 nip
  • 使用 mosca MQTT 的请求响应模式

    有没有办法使用 mosca MQTT 实现请求响应模式 以 检查客户端的回复 如果在预期时间内未收到预期回复 则重新发布 我相信这在 Mqtt 5 中是可能的 但截至目前 我必须使用 QoS 1 的 Mosca 代理 支持直到 Mqtt 3