1

3 つのノードがセットアップされた NATS ストリーミング クラスターがあります。サーバーのダウンタイム中に Java アプリケーションによって発行された NATS メッセージが失われたようです (つまり、サーバーがバックアップされて実行されているときに再発行されません)。

より詳細な説明:

  1. NATS クラスターがオンラインです。パブリッシャーとサブスクライバーのアプリケーションがオンラインになります。パブリッシャーは毎秒メッセージのパブリッシュを開始します。サブスクライバーはメッセージを受信します。
  2. NATS サーバーは停止しています。パブリッシャーは引き続きメッセージを発行します (これらのメッセージを「オフライン メッセージ」と呼びましょう)。サブスクライバーは何も受信しなくなります
  3. NATS サーバーがオンラインに戻ります。サブスクライバーは再びメッセージの受信を開始しますが、「オフライン メッセージ」は受信されません。

パブリッシャー アプリケーションとサブスクライバー アプリケーションの両方が NATS サーバーへの再接続を試行するように構成されており、タイムアウトしません。全体を通して例外はありません。

NATS 接続:

Options options = new Options.Builder().servers(serverList).maxReconnects(-1).build();

Connection nc = Nats.connect(options);

StreamingConnectionFactory cf = new StreamingConnectionFactory(natsProperties.getClusterId(), natsProperties.getClientId());
cf.setNatsConnection(nc);
streamingConnection = cf.createConnection();

出版社:

// subject and message String variables are passed in
streamingConnection.publish(subject, message.getBytes());

加入者:

streamingConnection.subscribe(subject, new MessageHandler() {
    public void onMessage(Message m) {
        System.out.prinf("Received msg: %s\n", m.getData())
    }
},  new SubscriptionOptions.Builder().durableName(durableName).build());

ドキュメントから、Java NATS クライアントには再接続バッファーが組み込まれているようです。バッファーを 10 倍に増やしてみましたが、役に立ちませんでした (また、私のメッセージは 2 桁の数字のみで構成されています)。これらの「オフライン メッセージ」を再送信するにはどうすればよいですか?

4

1 に答える 1