私は永続的なキュー、非トランザクション、クライアント確認応答を持っています。消費者は jms.prefetchPolicy.queuePrefetch=1&wireFormat.maxInactivityDuration=50000 で読み取ります
そして、コンシューマがメッセージを処理すると、メッセージを確認します。
コンシューマーがメッセージを読み、ACK を送信する前にプロセスが突然終了した場合、ActiveMq で何が起こるでしょうか? (ここでどの ActiveMq パラメーターが関係しますか?)
これは、コンシューマがメッセージを処理するのに 10 分かかる場合 (つまり、コンシューマ タスクが有効で動作している場合) とどのように違うのでしょうか。(TCP/IP 接続を監視しますか?接続が切断された場合、メッセージが確認応答されないと想定しますか?)
メッセージが「ポイズン ピル」であるかどうか、つまりコンシューマーをクラッシュさせるかどうかを判断するにはどうすればよいですか? (コンシューマー タスクが終了しない場合、再配信カウントは有効であるように見えます。メッセージには、「正常に確認されずに n 回読み取られましたか?」という内部カウンターがありますか?)
実験として、6 つのメッセージを送信しました。そのうちの 1 つは「ポイズン ピル」(コンシューマーが ack を送信する前にコンシューマーを殺す) で、2 つの同時コンシューマーが実行されています (コンシューマーがカウントを 2 にするたびにコンシューマーを自動的に再起動します)。死ぬ)。キューを見ると (jconsole を使用し、broker.setUseJmx(true) を使用して jmx を有効にしています)、4 つのメッセージが配信され、2 つが処理中です。機内に 1 つではなく 2 つあるのはなぜですか?
ActiveMq と JMS の仕様をしばらくの間、明確で決定的な答えが得られずに読んでいました。そのため、どのパラメーターが関係しているか、既知のバグがあるかどうかについての洞察は非常に役立ちます。