我正在尝试在 MQ Light 中确保交付。
我正在使用带有修改的 mqlight 输入节点的 Node-RED。我在 subscribe() 调用中添加了以下选项:
qos: mqlight.QOS_AT_LEAST_ONCE, autoConfirm: false, ttl: (60 * 60 * 24 * 1000)
这要求我调用 delivery.message.confirmDelivery() 以向 MQ Light 确认收到消息。
下面的屏幕截图是当 mqlight_NodeREDClient 的订阅设置为 autoConfirm false 时,收到一条消息,但没有调用 delivery.message.confirmDelivery()。这是为了模拟 Node-RED 流程中发生的某种错误。
此后,我修改了 Node-RED 流以执行 confirmDelivery(),并且流使用的任何消息现在都被确认 OK,即使 Node-RED 在发布时没有运行。该消息由 MQ Light 保存,因为目标上有一个 TTL,并且在我再次启动 Node-RED 时立即到达。
但是,此屏幕截图中的消息已经发送过一次但从未确认,永远不会重新发送。重新启动 Node-RED 不会改变这一点,消息仍处于未决状态。为了让 MQ Light 重新传输之前已经发送但从未被客户端确认的消息,需要满足哪些标准?