Я экспериментирую с гарантированной доставкой в MQ Light.Повторное поведение в MQ Light
Я использую Node-RED с модифицированным входным узлом mqlight. Я добавил следующие опции на вызов подписки():
qos: mqlight.QOS_AT_LEAST_ONCE, autoConfirm: false, ttl: (60 * 60 * 24 * 1000)
Это требует, чтобы я называю delivery.message.confirmDelivery(), чтобы признать в MQ Свету получение сообщения.
Снимок экрана ниже, когда подписка от mqlight_NodeREDClient настроена с использованием autoConfirm false, получено сообщение, НО не было вызвана доставка.message.confirmDelivery(). Это должно было имитировать некоторую ошибку, возникающую в потоке Node-RED.
С тех пор я изменил поток Node-RED для подтверждения доставки(), и все сообщения, потребляемые потоком, теперь подтверждены OK, даже если Node-RED не работает во время публикации. Сообщение хранится MQ Light, так как есть TTL в пункте назначения и приходит, как только я снова запускаю Node-RED.
Однако сообщение на этом снимке экрана, которое было отправлено один раз, но никогда не было подтверждено, никогда не повторяется. Перезапуск Node-RED не изменяет этого, сообщение все еще ожидает. Каковы критерии, которые необходимо выполнить, чтобы MQ Light мог повторно передать сообщение, уже отправленное ранее, но не подтвержденное клиентом?
Сообщение исчезло из пользовательского интерфейса через несколько часов, к сожалению, я ничего не регистрирую на стороне NodeRED, поэтому я не могу сказать, действительно ли это произошло или нет. Теперь я сделал еще несколько тестов и получил поведение, которое вы видите, и я ожидаю. Я сделаю еще несколько экспериментов и посмотрю, смогу ли я воспроизвести его. –