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() を実行すると、発行時に Node-RED が実行されていなくても、フローによって消費されたすべてのメッセージが正常に確認されるようになりました。宛先に TTL があるため、メッセージは MQ Light によって保持され、Node-RED を再起動するとすぐに到着します。
ただし、このスクリーンショットのメッセージは、一度送信されたが確認されていないため、再送信されることはありません。Node-RED を再起動してもこれは変わりません。メッセージはまだ保留中です。MQ Light が、以前に送信されたがクライアントによって確認されていないメッセージを再送信するために満たす必要のある基準は何ですか?