2

ディスクのスナップショットを取得するために、バックアップ中に HornetQ のすべての JMS キューを一時停止したいと考えています。jboss-cli私は呼んでいます:

connect   
/subsystem=messaging/hornetq-server=default/jms-queue=%queueName:pause

しかし、キューは一時停止していません。すべての JMS ジョブを一時停止するにはどうすればよいですか?

UPD

再現する手順:

root@debian:/opt/jboss/bin# ./jboss-cli.sh 
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] connect
[standalone@localhost:9999 /] /subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:pause         
{
    "outcome" => "success",
    "result" => undefined
}
[standalone@localhost:9999 /] 

しかし、私が電話するとき

[standalone@localhost:9999 /] /subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:count-messages
{
"outcome" => "success",
 "result" => 128L
}

そのため、呼び出すたびに /subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:count-messages異なる値が表示されます。

4

1 に答える 1

3

私はそれを再現できます:pauseメッセージの受信を無効にするだけです (受信者はメッセージを受信せず、エラーメッセージはありません)。ただし、メッセージを送信することは引き続き可能です。キューでもサブシステムレベルでも、他の操作は見つかりませんでした。したがって、「期待どおり」に機能しないことを確認することしかできません。


HornetQ は内部でジャーナルを使用します。見積もり:

HornetQ ジャーナルは、構成可能なファイルサイズでのみ追加され、単一の書き込み操作を有効にすることでパフォーマンスを向上させます。ディスク上の一連のファイルで構成され、最初は固定サイズで事前に作成され、パディングで埋められます。サーバー操作 (メッセージの追加、メッセージの削除、メッセージの更新など) が実行されると、ジャーナル ファイルがいっぱいになるまで、操作の記録がジャーナルに追加され、その時点で次のジャーナル ファイルが使用されます。

ジャーナルのフラッシュ/同期については、別の引用:

ジャーナル同期トランザクション

true の場合、HornetQ はすべてのトランザクション データがトランザクション境界 (コミット、準備、およびロールバック) でディスクにフラッシュされるようにします。デフォルトは真です。

ジャーナル同期非トランザクション

true の場合、HornetQ は非トランザクション メッセージ データ (送信および確認応答) がディスクにフラッシュされるようにします。デフォルトは真です。

.../data/messaging*/それほど悪くはないように見えますが、ディレクトリをバックアップしても問題ないという確認は見つかりませんでした。おそらく、「外部」から一貫したバックアップを取得する解決策はありません。


したがって、私が知っている唯一の信頼できる方法は、アクティブ/パッシブ設定を使用することです:

HornetQ では、サーバーのペアをライブとバックアップのペアとしてリンクできます。このリリースでは、ライブ サーバーごとに 1 つのバックアップ サーバーがあります。バックアップ サーバーは、1 つのライブ サーバーのみが所有します。フェイルオーバーが発生するまで、バックアップ サーバーは動作しません。

このアプローチは、「JBoss 内」からバックアップ (ただし、ファイル システムのバックアップではありません) を作成するために機能します。

于 2013-08-26T11:23:28.847 に答える