Ibm mq MQ灯光中的重新发送行为

Ibm mq MQ灯光中的重新发送行为,ibm-mq,amqp,node-red,Ibm Mq,Amqp,Node Red,我正在MQ Light中尝试确保交付 我将节点RED与修改的mqlight输入节点一起使用。我在subscribe()调用中添加了以下选项: 这要求我调用delivery.message.confirmDelivery()向MQ Light确认收到消息 下面的屏幕截图是当使用AutoConfig false设置来自mqlight_NodeREDClient的订阅时,收到一条消息,但未调用delivery.message.confirmDelivery()。这是为了模拟节点红色流中发生的某种错误

我正在MQ Light中尝试确保交付

我将节点RED与修改的mqlight输入节点一起使用。我在subscribe()调用中添加了以下选项:

这要求我调用delivery.message.confirmDelivery()向MQ Light确认收到消息

下面的屏幕截图是当使用AutoConfig false设置来自mqlight_NodeREDClient的订阅时,收到一条消息,但未调用delivery.message.confirmDelivery()。这是为了模拟节点红色流中发生的某种错误

此后,我修改了节点RED流以执行confirmDelivery(),该流使用的所有消息现在都被确认为OK,即使发布时节点RED没有运行。消息由MQ Light保存,因为目标上有一个TTL,并在我再次启动节点RED时到达

然而,这个截图中的信息,已经发送过一次,但从未确认过,永远不会被重新发送。重新启动节点RED不会改变这一点,消息仍处于挂起状态。为了让MQ Light重新传输以前已发送但从未经客户端确认的消息,需要满足哪些标准?

如果您没有重新启动NodeRED,我会说这是因为MQ Light不会重新传递到已连接的客户端,因为它认为客户端仍在处理消息。不过既然你有,那一定是别的原因

我刚刚尝试了相同的基本设置(没有NodeRED),其行为与您预期的一样-当您重新连接接收客户端时,MQ Light将重新传递消息,MQ Light UI将其勾选

我能想到的剩下的事情是:

  • 是否可能在发送该特定消息时,您的QoS为0 订阅
  • 您在发件人处对邮件设置了什么TTL
  • 您的预订电话设置了什么目的地TTL
  • 如果2。如果太低,则无论订户的QoS或值为3,消息都将从目标过期


    如果3。太低,并且NodeRED已停止足够长的时间,整个目的地将已过期。

    消息在几个小时后从UI中消失,不幸的是,我还没有在NodeRED端记录任何内容,因此我无法判断它是否真的通过。现在我做了更多的测试,得到了你看到的和我期望的行为。我会做更多的实验,看看是否可以复制它。
    qos: mqlight.QOS_AT_LEAST_ONCE, autoConfirm: false, ttl: (60 * 60 * 24 * 1000)