2012-02-27 6 views
0

私のアプリケーションでは、ActiveMQをJMS実装サーバーとして使用しています。シナリオは、公開されたメッセージを消費する多くの恒久サブスクライバと、メッセージオブジェクトから中央DBサーバーにデータを保存するメッセージリスナを持つトピックがあります。同じトピックで持続メッセージを公開し続けるプロデューサスレッドがあります。私は永続的なメッセージストアにKahaDBを使用しています。メッセージが公開されるとすぐに、kahaDBはメッセージストア内にデータログファイルを作成し、すべての永続的な加入者がメッセージを消費するまでメッセージを永続化します。私はいつでも、JMSサーバをシャットダウンし、すべてのデータログファイルを削除するかどうかを知りたいと思います。データログファイルに保存されていたメッセージを受信しない永続サブスクライバもほとんどないでしょうか、またはこのトピックのメッセージリスナーによって実行される中央データベースに保存されたメッセージはほとんどない可能性があります。 ヒントや助けが大変感謝しています...... ありがとうございます。ActiveMQでは、MessageListenerがメッセージストアのデータログファイルに依存するかどうかを確認します。

答えて

2

データファイルを削除するかどうかにかかわらず、ブローカーを停止して開始すると、公開済みメッセージをまだ受信していないトピック消費者はそれを受信しなくなります。この背後にある理由は、トピックに送信されたメッセージは永続メッセージストアに書き出されないためです。

耐久性と持続性は同じものではありません。恒久サブスクリプションは、サブスクライバが切断された場合にサブスクリプション状態を保持するようブローカに指示します。コンシューマが切断されている間に送信されたメッセージはすべて保持されます。一方、非永続サブスクリプションは有限です。加入者が切断すると、その間に送信されたメッセージは見逃されました。すべてのメッセージはメモリに保存され、ブローカを再起動しても残りません。

メッセージの永続性は、最終的な配信のためのメッセージを格納します。これにより、壊滅的な障害や、まだアクティブではない可能性のある消費者への後の配信が防止されます。

pub-subを使用してメッセージをブロードキャストし、サブスクリプションが耐久性があり、ブローカの再起動後も存続するようにするには、永続サブスクリプションの代わりにvirtual destinationsを使用する必要があります。

メッセージは永続的でも非永続的でもなく、ブローカをオフにしてデータディレクトリを削除しても失われません。

関連する問題