LINUX 環境で実行され、SYNCPOINT を使用して MQ でトランザクションを実行する Java アプリケーションを作成しています。Websphere MQ Java クラスを使用して、MQ サービスと対話します。私のコードでやっていることは次のとおりです(疑似):
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_FAIL_IF_QUIESCING | MQConstants.MQGMO_SYNCPOINT;
MQMessage message = new Message();
queue.get(message, gmo);
// process the message, save to database
databaseConnection.commit();
queueManager.commit();
基本的に、メッセージを取得して処理し、データベースに保持してから、queueManager でコミットを呼び出します。プロセスは、グレースフル シャットダウンを実行するために、TIBRV でメッセージをリッスンします。
メッセージが失われないことを確認するためにプロセスをテストしています。20,000 件のメッセージをキューに入れ、プロセスを実行します。処理中にグレースフル シャットダウン コールを実行します。次に、キューにあるメッセージの量とデータベースにあるメッセージの量を比較します。TIBRV メッセージを介して正常なシャットダウンが発生した場合、MQ メッセージの数 + DB メッセージの数 = 最初にキューにあったメッセージの合計。
ただし、kill
またはを実行するkill -9
と、メッセージが失われることがわかります。私は常に合計 19999 件のメッセージという結果になります。
このメッセージがどのように失われているかを調べる方法はありますか? Websphere App Server で注意すべきことはありますか?