3 つのノードがセットアップされた NATS ストリーミング クラスターがあります。サーバーのダウンタイム中に Java アプリケーションによって発行された NATS メッセージが失われたようです (つまり、サーバーがバックアップされて実行されているときに再発行されません)。
より詳細な説明:
- NATS クラスターがオンラインです。パブリッシャーとサブスクライバーのアプリケーションがオンラインになります。パブリッシャーは毎秒メッセージのパブリッシュを開始します。サブスクライバーはメッセージを受信します。
- NATS サーバーは停止しています。パブリッシャーは引き続きメッセージを発行します (これらのメッセージを「オフライン メッセージ」と呼びましょう)。サブスクライバーは何も受信しなくなります
- 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 桁の数字のみで構成されています)。これらの「オフライン メッセージ」を再送信するにはどうすればよいですか?