MQ Broker (Amazon MQ) からメッセージを受信する単純な NodeJS アプリ (コンシューマーとして) を作成しています。メッセージを受信できましたが、パブリッシャーがブローカーにメッセージを送信すると、コンシューマーは新しいメッセージを読みません (新しいメッセージがないために数分間アイドル状態になった後)。最終的には切断して再接続しますが、その時点では新しく公開されたメッセージのみを受信します。
ここでは、メッセージ番号 (8、9、12) が読み取られていないことがわかります。これは私の消費者向けアプリの問題ですか、それともパブリッシャーまたはブローカーに関係がありますか?
const mqtt = require('mqtt');
const connect_mqtt = async () => {
const host = 'SOME_HOST';
const options = {
username: 'SOME_USER',
password: 'SOME_PASSWORD',
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
keepalive: 1000
};
const client = mqtt.connect(host, options);
client.on('error', function (error) {
console.error('Connection Error:', error);
});
client.on('disconnect', function (error) {
console.error('Disconnected', error);
});
client.on('close', function (error) {
console.error('Connection Closed', error);
});
client.on('connect', function () {
console.log('Connecting...');
client.subscribe('pass-log', function (error) {
if (!error) {
console.log('Connected!');
} else {
console.error('Subscription Error', error);
}
});
});
client.on('message', function (topic, message) {
if (topic === 'pass-log') {
console.log('Consume', topic, message.toString());
} else {
console.log('NOT YOUR TOPIC');
}
});
};
connect_mqtt();
更新1:
keepalive, clean, reconnectPeriod, qos
出版社からのマッチングから追加しましoptions
たが、今はうまくいっているようです。これについてさらに観察を行います。
更新 2:
パブリッシャーがトピックにメッセージを送信している間にノードアプリを終了して、サブスクライバーを意図的に切断しました。サブスクライバーを再接続すると、最後のメッセージのみが読み取られます。