グローバルサーバ連携のメッセージ転送で異常発生した場合の対処の流れは、以下のとおりです。
送信異常となった原因を取り除く
サービスの通信の再開
グローバルサーバ連携のメッセージ転送で異常発生後の復旧は、異常となった原因を取り除いたあとにキュー間転送機能の自動リトライによって復旧します。
ただし、キュー間転送サービスの通信が切断されている場合にはサービスの通信の再開を行う必要があります。異常となった原因を取り除いたあと、mqdnsgwprtコマンドを-aオプションを指定して実行し、状態が“Suspend”となっている場合、サービスの通信の再開作業を実行してください。
送信側、または受信側のサーバのシステムログに出力されているInterstageのキュー間転送機能のメッセージから、送信異常となった原因の対処を行ってください。
サービスの通信を再開するためには、mqdnsgwcommコマンドを使用して行います。
以下にmqdnsgwcommコマンド(サービスの通信の再開)の入力例を示します。mqdnsgwcommコマンドの詳細は、“Interstage Application Server MessageQueueDirector説明書”を参照してください。
mqdnsgwcomm -s MQDESIGS -a ID000001
送信側サーバがISIサーバで受信側サーバがグローバルサーバのとき、データのサイズが上限(1999996バイト)を超えているなどグローバルサーバで扱うことができないメッセージが送信された場合、メッセージの転送には成功しません。この場合、以下の手順で問題があるメッセージを退避・削除して転送を再開してください。
メッセージ転送を一時停止
mqdnsgwcomm -s MQDシステム名 -d 送信チャネル識別子
送信チャネル識別子はエラー発生時にシステムログに出力されるMQD6352、またはMQD6358のメッセージの可変情報(channelid)を指定してください。
対象のキューからメッセージを削除
キュー間転送の定義を確認し、対象のキューを特定
mqdnsgwprt -s MQDシステム名 -c ---出力結果--- [MNGR] sproc = 1 rproc = 1 systemid = SERVER01 repository = SERVER01NSGWDERVERREPID errorretry = continue [SERVER] name = SERVER02 iorfile = /mqd/MQDIORFILE2 [CHANNEL] channelid = ID000001 sndname = SEND::CHANNEL001 rcvname = CHANNEL002 evttype = any ectype = CHANNEL server = SERVER02 packmsg_cnt = 1 packmsg_wtime = 0 [RCHANNEL] rcvname = RECV::CHANNEL004 ecttype = CHANNEL recvnum = 1
コマンドの出力結果から送信チャネル識別子(channelid)に対応する送信チャネル(sndname)の設定を確認し、キュー名を特定します。
上記のコマンド出力結果の場合、送信チャネル識別子(channelid)がID000001、送信チャネル(sndname)がSEND::CHANNEL001、キュー名がCHANNEL001となります。
特定したキューからメッセージを削除
apfwdbqctrlmsg -save -q キュー名 -d esimsgdb -o 保存先ファイル
特定したキュー名を指定してコマンドを実行することで、キューの先頭のメッセージを保存先ファイルに保存し、先頭のメッセージはキューから削除されます。
メッセージの保存先ファイルの確認
保存先ファイル内のメッセージの内容を確認し、必要に応じて受信サーバで保存先ファイルからデータを復元、および編集してメッセージを復旧してください。
ポイント
保存先ファイルにはメッセージがバイナリデータとして出力されます。
Javaプログラムでファイルからデータを復元するための記述例を以下に示します。
byte[] b; FileInputStream fis = new FileInputStream("保存先ファイル"); try { DataInputStream dis = new DataInputStream(fis); dis.read(b); } finally { fis.close(); }
メッセージ転送の再開
以下のコマンドを実行して、メッセージ転送を再開してください。
mqdnsgwcomm -s MQDシステム名 -a 送信チャネル識別子