Comments
Description
Transcript
トピック WebSphere MQ -
便利なサポート・パックの紹介 便利なサポート・パックの紹介 WebSphere MQ - Message Test Utility (MA0T) ISE Transaction System 2006年3月 Copyright ISE Co,.Ltd トピック 概要 導入手順 実行方法 スクリプト・ファイルのフォーマット スクリプト変数の使用 メッセージ・レートとインターバル メッセージのファイル入力 実行例 2 Copyright ISE Co,.Ltd 概要 WebSphere MQ - Message Test Utility メッセージをMQPUT/MQGETできるコマンドライン・ユーティリティー 標準添付のツール(amqsput、amqsget)よりも高機能 MQPUT/MQGETの処理フローをスクリプトで記述.スクリプトの内容に従って、メッセージを操作 サポート・レベル カテゴリ4 - Third Party Contributions AS-ISベース.IBMからの正式サポートなし ソース・コードが添付されているのでカスタマイズは可能 パッケージ Windows環境での実行ファイル その他の環境ではコンパイルして実行ファイルを作成.ソース・ファイルとmakeファイルを配布 makeファイルは、AIX、Solaris、Linux用を配布 3 Copyright ISE Co,.Ltd 概要 主な機能 MQPUT/MQGET amqsput、amqsgetのようにMQPUT、MQGET専用ではない.MQPUT/MQGETの混在が可能 ・スクリプトで処理フローを記述.MQPUT、MQGETの発行タイミングを制御 ・コミット(MQCMIT)、バックアウト(MQBACK)の同期点制御も可能 (コンテキストを除く)MQMDを任意に設定可能、 MQPMO、MQGMOも主要なフィールド(optionsなど)は任意に設定可能 RFH2ヘッダーの組み立てが可能 メッセージ・レートの指定 ファイル操作 ファイルの内容をメッセージに組み立てて送信したり、受信したメッセージをファイルに出力 MQMDやRFH2ヘッダーの内容もファイルに入出力可能 バッファー操作 メッセージ・バッファーの各種操作 ファイルからの読み込み、ファイルへの出力、オーバーレイ、Substringなどが可能 処理フロー ファイル操作、バッファー操作、MQPUT、MQGETの処理フローをスクリプトで記述.繰り返し制御も可能 時間測定 特定区間の処理時間や、メッセージのスループットを測定可能 4 Copyright ISE Co,.Ltd 導入手順 1. サポートパックのダウンロードサイトからダウンロードしたzipファイルを解凍する 2. 任意のディレクトリを作成し、以下のファイルをコピーする MsgTest.exe :実行ファイル( ..¥MsgTest¥bin に解凍される) libexpath.dll :ライブラリー( ..¥MsgTest¥bin に解凍される) XMLスキーマを使用する場合は、以下のファイルを任意のディレクトリにコピーする MsgTest.xsd :スクリプト・ファイル用のXMLスキーマ( ..¥MsgTest¥Schema に解凍される) 3. 実行ファイルをコピーしたディレクトリにパスを通す ※ サポートパック ダウンロードサイト http://www-306.ibm.com/software/integration/support/supportpacs/ Copyright ISE Co,.Ltd 5 実行方法 コマンド MsgTest スクリプト・ファイル名 [パラメーター] ツールを制御するスクリプト・ファイルを第1引数に指定して実行 必要に応じてパラメーターを指定して実行する パラメーターはスクリプト・ファイル内から参照することができる(後述参照) スクリプト・ファイルのフローに従って、処理を実行 【スクリプト・ファイル】 処理フローを記述 ファイルの入力 メッセージのGET メッセージのPUT コミット ファイルへ出力 : MA0T <MsgTest> <Control> ・・・ <Test Name=“Test01”> ・・・ </Test> </MsgTest> 6 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット MA0TはXMLフォーマットで書かれたスクリプト・ファイルに従って処理を実行 スクリプト・ファイルは以下の4つのタグによって構成されている MsgTestタグ スクリプト・ファイルのルートタグ Controlタグ ツールの動作設定を行う Defaultsタグ 変数宣言や各種コマンドのデフォルト設定を行う Testタグ [ファイル・イメージ] 処理フローを記述する MsgTestタグ Controlタグ Defaultsタグ Testタグ <MsgTest> <Control> ・・・ </Control> <Defaults> ・・・ </Defaults> <Test Name=“Test01”> ・・・ </Test> </MsgTest> 7 Copyright ISE Co,.Ltd 8 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット Control タグ スクリプト・ファイルに1要素だけ定義することができるタグ ツールの動作に関する以下の設定を行う キュー・マネージャー接続に関する設定 アドレスやポート番号、キュー・マネージャー名などを定義 ログ・ファイルに関する設定 プログラムが出力するログやレポートのファイル名や出力先を定義 プログラムの動作全般に関する設定 並列実行数やエラー時の動作などを定義 【Controlタグの主なタグと定義内容】 タグ名 内容 <Connection> キュー・マネージャーにクライアント接続するための情報を定義 <TestLog> ログ・ファイルの指定 <TestReport> レポート・ファイルの指定 <Concurrency> 並列実行数を指定 <OnError> エラーが発生した場合の動作を指定 Controlタグで使用できるタグの詳細については、 サポート・パックMA0Tのマニュアル「7.1 <Control>Elements.」を参照 9 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット Control タグの定義例 <Control> <QMgr>QMGR01</QMgr> <Channel>QMGR01.SVRCONN</Channel> <Host>127.0.0.1</Host> <Port>1414</Port> <TestLog> <File>RequestReply.log</File> <Dir>C:¥MsgTest¥Logs</Dir> </TestLog> <TestReport> <File>RequestReply.rpt</File> <Dir>C:¥MsgTest¥Reports</Dir> </TestReport> <TestMaxWait>30</TestMaxWait> <Concurrency>3</Concurrency> <OnError>LOG</OnError> </Control> QMGR01.SVRCONNチャネルを使用して、QMGR01に接続する あて先は127.0.0.1のポート1414 ログ・ファイルは 「C:¥MsgTest¥Logs¥RequestReply.log」に出力 レポート・ファイルは 「C:¥MsgTest¥Reports¥RequestReply.rpt」に出力 テストの終了を30秒間まで待つ 並列数を3に設定 エラー発生時はログに出力し、他のテストは実行する 10 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット Defaults タグ スクリプト・ファイルに1要素だけ定義することができるタグ 変数の宣言やコマンドのデフォルト設定を行う 変数の宣言 数値属性や文字属性の変数の宣言をする MQMDおよびRFH2の宣言も可能 メッセージ操作に関する設定 ファイルやキューに対するメッセージの入出力に関する設定を行う メッセージの比較や抜き出しなど、メッセージ操作に関する設定を行う 待ち時間に関する設定 スリープ時間や、キューのメッセージ数によるトリガー制御の設定を行う システムコマンドに関する設定 OSから実行するコマンドやプログラムを定義する トランザクション制御に関する設定 コミットやバックアウトに関する設定を行う Copyright ISE Co,.Ltd 11 スクリプト・ファイルのフォーマット 【Defaultsタグの主なタグと定義内容】 タグ名 内容 <Num> 数値型の変数の定義 <Str> 文字列型の変数の定義 <GetFile> バッファーに読み込むファイル(MQMDやRFH2、メッセージ)の指定 <PutFile> バッファーの内容を出力するファイルの指定 <MQMD> MQMDを定義 <RFH2> RFH2ヘッダーを定義 Defaultsタグで使用できるタグの詳細については、 サポート・パックMA0Tのマニュアル「7.2 <Defaults>Elements.」を参照 Defaults タグの定義例 <Defaults> <Str Name="Dir">C:¥MsgTest¥Data</Str> <GetMsg> <Q>GETQ</Q> </GetMsg> </Defaults> 文字列型の変数 Dir の定義 GetMsgコマンドの受信キューのデフォルトを GETQに設定 12 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット Test タグ 処理フローを記述するためのタグ Testタグの記述内容をインタープリタで実行 1つのスクリプトに複数の処理フローを記述することも可能 TestタグにName属性を設定して識別する 例 : <Test Name=“test01”> Defaultsタグで定義できる項目に加えて、以下の制御ができる フロー制御 for文やFinallyなど、フロー制御を記述することができる インターバルコマンド 特定区間の処理にかかった時間を測定する 入出力制御 標準入力や標準出力、ユーザー・ログの入出力を制御する 演算コマンド 数値型の変数に対して四則演算をする Copyright ISE Co,.Ltd 13 スクリプト・ファイルのフォーマット 【Testタグの主なタグと定義内容】 タグ名 内容 <PutMsg> 各ヘッダーやメッセージ内容を読み込んで、メッセージを送信する <GetMsg> キューからメッセージを受信し、バッファーに読み込む <WaitOnTime> 指定された時間、処理をスリープさせる <For> For文 <Finally> 異常終了時に、最後に必ず実行される処理を記述する <Add> 値を加算する <Commit> トランザクションをコミットする <StdOut> コンソールに出力する <System> OSにコマンドやプログラムの実行を命令する Testタグで使用できるタグの詳細については、 サポート・パックMA0Tのマニュアル「7.3 <Test>Elements.」を参照 14 Copyright ISE Co,.Ltd スクリプト・ファイルのフォーマット Test タグの定義例 <Test Name="#1 RequestReply"> <GetFile> <File>FileIn1.txt</File> <Dir>%Dir%</Dir> </GetFile> <MQMD Name="MD01"> <MsgId/> <CorrelId>REQREP1</CorrelId> </MQMD> <PutMsg MQMD="MD01"/> <MQMD Name="MD01"> <MsgId/> <CorrelId>%MsgId%</CorrelId> </MQMD> <GetMsg MQMD="MD01"/> <PutFile> <File>FileOut1.txt</File> <Dir>%Dir%</Dir> </PutFile> </Test> 「%Dir%¥FileIn1.txt」をバッファーに読み込む MsgIdにnull、CorrelIdにREQREP1をセットし、その他のパラメーターは デフォルト値でMQMDを作成する(変数名はMD01) メッセージを送信 MsgIdにnull、CorrelIdに上記<PutMsg>でのMsgIdをセットして MQMDを作成する メッセージを受信(CorrelId指定での受信) 受信したメッセージの内容を「%Dir%¥FileOut1.txt」に出力する 15 Copyright ISE Co,.Ltd 16 Copyright ISE Co,.Ltd スクリプト変数の使用 スクリプト変数 MsgTestコマンドの引数をスクリプト・ファイルから参照可能 コマンドの引数を「%1%」、「%2%」の形式で指定して参照 ツールが自動で定義する各種の変数をスクリプト・ファイルから参照可能 実行コマンド MsgTest Test01.xml QMGR1 localhost 解決されたスクリプト内容 Test01.xml <MsgTest> <Control> <Qmgr>%1%</QMgr> <Host>%2%</Host> </Control> ・・・ 引数の参照 <Test> <GetMsg /> <PutMsg> <Q>%ReplyToQ%</Q> </PutMsg> ・・・ </Test> </MsgTest> <MsgTest> <Control> <Qmgr>QMGR1</QMgr> <Host>localhost</Host> </Control> ・・・ <Test> <GetMsg /> <PutMsg> <Q>xxxxxx</Q> </PutMsg> ・・・ <GetMsg>で受信したメッセージの </Test> MQMDのReplyToQ名 </MsgTest> ツールが定義している変数の参照 Copyright ISE Co,.Ltd 17 スクリプト変数の使用 自動で定義されるスクリプト変数 変数 内容 %YYYY% 4桁の西暦年 %MsgId% 最後に実行したMQPUTもしくはMQGETでのMQMDのメッセージID %CorrelId% 最後に実行したMQPUTもしくはMQGETでのMQMDの相関ID %ReplyToQ% 最後に実行したMQPUTもしくはMQGETでのMQMDのReplyToQ名 %LastRC% 最後に実行したコマンドの理由コード %LastQ% 最後に実行した<GetMsg>コマンドもしくは<PutMsg>コマンドでのキュー名 %TestTotalGetMsg% <GetMsg>コマンドを実行した総数 %TestFailedGetMsg% <GetMsg>コマンドが失敗した総数 ツールが自動で定義するスクリプト変数の詳細については、 サポート・パックMA0Tのマニュアルの「8.2 Automatic Variables.」を参照 18 Copyright ISE Co,.Ltd メッセージ・レートとインターバル 送信するメッセージのレート指定と、特定区間の時間を測定をする機能を提供 メッセージ・レートの指定 等間隔での送信や、ランダムなインターバルでの送信ができる PutMsgタグの子要素であるMessageRateタグでレートを指定 並列実行数(ControlタグのConcurrencyタグで指定)が1の場合のみ設定可能 インターバル測定 特定区間の時間測定 インターバル・コマンド(IntervalStartタグ、IntervalEndタグ)を設定した区間の時間を測定 メッセージ・インターバルの測定 メッセージの送信から、応答の受信までの時間を測定 PutMsgタグのIntervalInMsgIdタグ(もしくはIntervalInCorrelIdタグ)とGetMsgタグの IntervalInMsgIdタグ(もしくはIntervalInCorrelIdタグ)で設定する 測定した結果は、スクリプト終了時にレポート・ファイルに出力される ControlタグでTestIntervalを定義している場合、インターバルごとにファイルが作成される 19 Copyright ISE Co,.Ltd 20 Copyright ISE Co,.Ltd メッセージのファイル入力 送信するメッセージの内容をファイルから読み込むことが可能 MQMD MQRFH2 ユーザー・メッセージ ※MQMDとMQRFH2はそれぞれXMLフォーマットで記述する MQMDファイルの記述方法 MQMDタグをルート・タグとして作成 それぞれのパラメーターはMQMDタグの子要素として記述する 【MQMDファイルのサンプル】 <?xml version=“1.0”?> <MQMD> <Version>2</Version> <Report>0x00000000</Report> <MsgType>2</MsgType> <Expiry>3000</Expiry> <Feedback>0</Feedback> <Encoding>273</Encoding> <CodedCharSetId>1208</CodedCharSetId> <Format>MQHRF2</Format> <Priority>5</Priority> <Persistence>0</Persistence> ・・・(中略) ・・・ </MQMD> 21 Copyright ISE Co,.Ltd メッセージのファイル入力 RFH2ファイルの記述方法 MQRFH2タグをルート・タグとして作成 各パラメーターはFolderタグとFormatタグに記述する MQRFH2フォルダーの内容はCDATAセクションで囲んで記述する 【RFH2ファイルのサンプル】 <?xml version="1.0"?> <MQRFH2> <Format></Format> <Folder><![CDATA[<mcd><Msd>xmlns</Msd></mcd>]]></Folder> <Folder><![CDATA[<jms><Dst>queue:///QL01?persistence=1</Dst><Exp>300</Exp><Dlv>1</Dlv></jms>]]></Folder> <Folder><![CDATA[<usr><contentType>text/xml; charset=utf-8</contentType></usr>]]></Folder> </MQRFH2> ユーザー・メッセージ テキスト・ファイルにメッセージ内容を記述する 22 Copyright ISE Co,.Ltd 実行例(1) 実行例(1) アプリケーションAのテスト・ドライバーとしてMA0Tを実行する QMGR1のQL.REQUESTにメッセージを送信し、QL.REPLYから応答メッセージを受信する 応答メッセージは、送信メッセージのメッセージIDを相関IDに指定して受信する スクリプト・ファイル test001.xml を実行する テスト・メッセージはTestMsg01.txtを送信する ログ・ファイルは以下の名前で出力する ログ・ファイル : C:¥ma0t¥log¥case001_log.txt レポート・ファイル : C:¥ma0t¥log¥case001_report.txt QMGR1 MA0T メッセージIDを 相関IDに指定して受信 test001.xml QL.REQUEST アプリケー ションA QL.REPLY TestMsg01.txt case001_log.txt case001_report.txt 23 Copyright ISE Co,.Ltd 実行例(1) 実行コマンド MsgTest test001.xml QMGR1 QL.REQUEST QL.REPLY TestMsg01.txt 001 スクリプト・ファイル <?xml version="1.0"?> <MsgTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“ xsi:noNamespaceSchemaLocation="C:¥ma0t¥Schema¥MsgTest.xsd"> <Control> <Connection Name="CONN"> <QMgr>%1%</QMgr> <Channel>SYSTEM.DEF.SVRCONN</Channel> <Host>localhost</Host> <Port>1414</Port> </Connection> <TestLog> <File>case%5%_log.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestLog> <TestReport> <File>case%5%_report.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestReport> <NextLogMsgInterval>1</NextLogMsgInterval> <Concurrency>1</Concurrency> <ConcurrencyWait>20</ConcurrencyWait> <OnError>LOG</OnError> </Control> <Defaults> <Str Name="Dir">C:¥ma0t</Str> </Defaults> 24 Copyright ISE Co,.Ltd 実行例(1) <Test Name="*** Test case No. %5% ***"> <IntervalStart Name="GetPutTime"/> <GetFile> <File>%4%</File> <MQMDFile MQMD="MQMDput">MQMDput01.xml</MQMDFile> <RFH2File RFH2="RFH2put">RFH2put01.xml</RFH2File> <Dir>%Dir%¥data</Dir> <CmdMaxWait>5</CmdMaxWait> </GetFile> <PutMsg MQMD="MQMDput" RFH2="RFH2put" Connection="CONN"> <Q>%2%</Q> </PutMsg> <GetMsg MQMD="MQMDget" RFH2="RFH2get" Connection="CONN"> <Buffer>B1</Buffer> <Q>%3%</Q> <CmdMaxWait>5</CmdMaxWait> <CorrelId>%MsgId%</CorrelId> </GetMsg> <PutFile> <Buffer>B1</Buffer> <MQMDFile MQMD="MQMDget">case%5%_outMQMD.xml</MQMDFile> <RFH2File RFH2="RFH2get">case%5%_outRFH2.xml</RFH2File> <File>case%5%_outMSG.xml</File> <Dir>%Dir%¥log</Dir> </PutFile> <IntervalEnd Name="GetPutTime"/> </Test> </MsgTest> 25 Copyright ISE Co,.Ltd 26 Copyright ISE Co,.Ltd 実行例(2) 実行例(2) キュー・マネージャー:QMGR1のキュー:QL.BACKUPからメッセージを取得しファイルに保存 保存したメッセージをキュー・マネージャー:QMGR2のキュー:QL.RESTOREにPUTする QL.BACKUPの全てのメッセージをC:¥ma0t¥backup_messageに以下の名前でバックアップする MQMD : Noxxx_MQMD.xml(xxxはメッセージのファイルと紐付けるシーケンス番号) メッセージ : Noxxx_message.txt (xxxはMDMQのファイルと紐付けるシーケンス番号) スクリプト・ファイルはBackUp.xml(バックアップ用)とRestore.xml(リストア用)を実行する 【メッセージのバックアップ】 【メッセージのリストア】 MA0T MA0T Noxxx_MQMD.xml BackUp.xml QMGR1 QL.BACKUP Restore.xml QMGR2 Noxxx_message.txt QL.RESTORE 27 Copyright ISE Co,.Ltd 実行例(2) バックアップ時のコマンドとスクリプト・ファイル コマンド MsgTest BackUp.xml QMGR1 QL.BackUp スクリプト・ファイル <?xml version="1.0"?> <MsgTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“ xsi:noNamespaceSchemaLocation="C:¥ma0t¥Schema¥MsgTest.xsd"> <Control> <Connection Name="CONN"> <QMgr>%1%</QMgr> <Channel>SYSTEM.DEF.SVRCONN</Channel> <Host>localhost</Host> <Port>1414</Port> </Connection> <TestLog> <File>backup_log.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestLog> <TestReport> <File>backup_report.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestReport> <NextLogMsgInterval>1</NextLogMsgInterval> <Concurrency>1</Concurrency> <ConcurrencyWait>20</ConcurrencyWait> <OnError>LOG</OnError> </Control> 28 Copyright ISE Co,.Ltd 実行例(2) <Defaults> <Str Name="Dir">C:¥ma0t</Str> </Defaults> <Test Name="Backup"> <ForEver Name="GetNum" Format="%03d"> <MQMD Name="MQMDget"> <MsgId/> <CorrelId/> </MQMD> <GetMsg MQMD="MQMDget" Connection="CONN"> <Buffer>B1</Buffer> <Q>%2%</Q> <GmoWait>5000</GmoWait> <CmdMaxWait>10</CmdMaxWait> <BreakOnRC>2033</BreakOnRC> </GetMsg> <PutFile> <Buffer>B1</Buffer> <MQMDFile MQMD="MQMDget">No%GetNum%_MQMD.xml</MQMDFile> <File>No%GetNum%_message.txt</File> <Dir>%Dir%¥backup_message</Dir> </PutFile> </ForEver> </Test> </MsgTest> 29 Copyright ISE Co,.Ltd 実行例(2) リストア時のコマンドとスクリプト・ファイル コマンド MsgTest Restore.xml QMGR2 QL.RESTORE スクリプト・ファイル <?xml version=“1.0”?> <MsgTest xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xsi:noNamespaceSchemaLocation="C:¥ma0t¥Schema¥MsgTest.xsd"> <Control> <Connection Name="CONN"> <QMgr>%1%</QMgr> <Channel>SYSTEM.DEF.SVRCONN</Channel> <Host>localhost</Host> <Port>1414</Port> </Connection> <TestLog> <File>restore_log.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestLog> <TestReport> <File>restore_report.txt</File> <Dir>C:¥ma0t¥log</Dir> </TestReport> <NextLogMsgInterval>1</NextLogMsgInterval> <Concurrency>1</Concurrency> <ConcurrencyWait>20</ConcurrencyWait> <OnError>LOG</OnError> </Control> 30 Copyright ISE Co,.Ltd 実行例(2) <Defaults> <Str Name="Dir">C:¥ma0t</Str> </Defaults> <Test Name="Restore"> <IntervalStart Name="RestoreTime"/> <ForEver Name="PutNum" Format="%03d"> <GetFile> <File>No%PutNum%_message.txt</File> <MQMDFile MQMD="MQMDput">No%PutNum%_MQMD.xml</MQMDFile> <Dir>%Dir%¥backup_message</Dir> <CmdMaxWait>5</CmdMaxWait> </GetFile> <PutMsg MQMD="MQMDput" Connection="CONN"> <Q>%2%</Q> </PutMsg> </ForEver> <IntervalEnd Name="RestoreTime"/> </Test> </MsgTest> 31 Copyright ISE Co,.Ltd