...

トピック WebSphere MQ -

by user

on
Category: Documents
213

views

Report

Comments

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
Fly UP