0

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();

ActiveMQ から確認したとおり、接続はアクティブです ここに画像の説明を入力

更新1:

keepalive, clean, reconnectPeriod, qos出版社からのマッチングから追加しましoptionsたが、今はうまくいっているようです。これについてさらに観察を行います。

更新 2:

パブリッシャーがトピックにメッセージを送信している間にノードアプリを終了して、サブスクライバーを意図的に切断しました。サブスクライバーを再接続すると、最後のメッセージのみが読み取られます。

4

0 に答える 0