キュー マネージャに到着した MQ メッセージをログ ファイルに追加するスクリプトファイルを作成したいと考えています。助けてください
1 に答える
すべてのメッセージがチャネルに届くようにする場合は、 mrmq.dk の BlockIP2 ページから LogIP 出口を使用できます。SupportPac MA0Wなどの API 出口は、送信されたすべてのメッセージをログに記録できます。API 出口は、チャネルを介して到着するメッセージだけでなく、ローカル アプリケーションからのメッセージもキャッチできます。
これをスクリプト化する場合は、Q ( SupportPac MA01から) などのプログラムを使用して、メッセージが到着したときにキューからメッセージを削除し、ファイルに追加できます。
例えば、
#!/usr/bin/ksh
q -IMYQMGR/MY.QUEUE >> logfile.txt
通常、スクリプトはトリガーされ、新しいメッセージをファイルに追加するように構成されます。これの問題は、メッセージを破壊的に削除することです。これらのメッセージを使用する必要があるレコードのアプリケーションがある場合、それは優れたソリューションではありません。キューをブラウズすることはできますが、アプリ オブ レコードがメッセージを取得する前にメッセージを取得できる保証はありません。また、ブラウズは定期的にキューの先頭から再開されるため、同じメッセージを 2 回ログに記録する可能性があります。
もう 1 つのスクリプト オプションは、Perl MQSeriesモジュールです。このモジュールは、WMQ API のすべてのオプションとオブジェクト指向メソッドを公開します。手っ取り早く汚いものが必要な場合は、Q プログラムが実行可能ファイルとして提供されます。すべての API をスクリプトに公開する強力なものが必要な場合 (そして、コンパイルすることを気にしない場合) は、Perl MQSeries モジュールが優れた方法です。以下は、モジュールのサンプルから抜粋したコード スニペットで、メッセージを取得する方法を示しています。
while (1) {
$sync_flag = 0;
undef $outcome;
my $request_msg = MQSeries::Message::->new();
my $status = $request_queue->
Get('Message' => $request_msg,
'GetMsgOpts' =>
{
'WaitInterval' => 5000, # 5 seconds
'Options' => (MQSeries::MQGMO_WAIT |
MQSeries::MQGMO_SYNCPOINT_IF_PERSISTENT |
MQSeries::MQGMO_CONVERT |
MQSeries::MQGMO_FAIL_IF_QUIESCING),
},
);
unless ($status) { # Error
my $rc = $request_queue->Reason();
die "Error on 'Get' from queue $qmgr_name/$request_qname:\n" .
"\tReason: $rc (" . MQReasonToText($rc). ")\n";
}
next if ($status < 0); # No message available
過去に人々が行ったことの 1 つは、キューをトピックのエイリアスに変換することです。メッセージを使用するアプリは新しいキューから GET にリダイレクトされ、管理サブスクリプションはトピックを新しいキューに接続します。この時点で、実際のアプリはすべてのメッセージを取得し、トピックを通過するメッセージをログに記録するための新しいサブスクリプションを作成できます。