質問を明確にするコメントに従って更新します。
を try ブロックで囲み、.PUT
をキャッチしMQException
ます。noMQException
がスローされた場合、動作し、 PUT
RC=0 が返されます。たとえば、これはサンプルPUT
プログラムからのものです。
void PutMessages()
{
try
{
// mq properties
properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.HOST_NAME_PROPERTY, hostName);
properties.Add(MQC.PORT_PROPERTY, port);
properties.Add(MQC.CHANNEL_PROPERTY, channelName);
// display all details
Console.WriteLine("MQ Parameters");
Console.WriteLine("1) queueName = " + queueName);
Console.WriteLine("2) host = " + hostName);
Console.WriteLine("3) port = " + port);
Console.WriteLine("4) channel = " + channelName);
Console.WriteLine("5) numberOfMsgs = " + numberOfMsgs);
Console.WriteLine("");
// create connection
Console.Write("Connecting to queue manager.. ");
queueManager = new MQQueueManager(queueManagerName, properties);
Console.WriteLine("done");
// accessing queue
Console.Write("Accessing queue " + queueName + ".. ");
queue = queueManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
Console.WriteLine("done");
// creating a message object
message = new MQMessage();
message.WriteString(messageString);
// putting messages continuously
for (int i = 1; i <= numberOfMsgs; i++)
{
Console.Write("Message " + i + " <" + messageString + ">.. ");
queue.Put(message);
Console.WriteLine("put");
}
// closing queue
Console.Write("Closing queue.. ");
queue.Close();
Console.WriteLine("done");
// disconnecting queue manager
Console.Write("Disconnecting queue manager.. ");
queueManager.Disconnect();
Console.WriteLine("done");
}
catch (MQException mqe)
{
Console.WriteLine("");
Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
Console.WriteLine(mqe.StackTrace);
}
}
前述のとおり、これはサンプル コードからのものであり、本番環境向けの実際のプログラムでは、おそらくよりきめ細かい例外処理が行われます。つまり、API 呼び出しは成功するか、MQException
. 正確な動作は、オプションによって異なります。たとえば、 でメッセージ変換を要求するGET
と、変換エラーが発生する可能性がありますが、バイナリ ペイロードとして取得されたまったく同じメッセージは成功します。
以前の応答:
質問を理解しているかどうかわかりませんが、あなたが尋ねているのは、WebSphere MQ を使用して要求/応答プログラムを設計する方法であり、それが私がどのように応答するかということです。ただし、「応答」が実際に からの理由とリターン コードを意味している場合はPUT
、質問を明確にしてください。回答を更新します。
要求/応答の通常のパターンは、要求プログラムが最初に応答先キューを開くというものです。開かれているキューの名前がモデル キューである場合、キュー マネージャーは動的キューを作成し、そのハンドルを返します。それ以外の場合、キューは既存のローカル キューである必要があります。
アプリケーションは、応答先キューのハンドルを取得すると、要求キューを開き、新しい要求メッセージを作成します。ローカルの応答先キューの名前はreplyToQueue
、要求メッセージのフィールドを初期化するために使用されます。replyToQMgr
メッセージのフィールドには、ローカル・キュー・マネージャー名が自動的に入力されます。その後、アプリはメッセージを書き込み、返信先キューで返信を待ちます。
複数のアプリ インスタンスが同じ返信先キューでリッスンしている場合、通常は必要な特定のメッセージの相関 ID を指定します。通常の設計では、要求メッセージを読み取るサーバーが応答メッセージMQMD.MsgID
のMQMD.CorrelID
フィールドに を入れますが、受信メッセージ ID を送信メッセージ ID に転送する場合もあります。
を発行する前にCOMMIT
必ずを確認してください。そうしないと、返信がありません。PUT
GET
これについては、情報センターのトピック「Request サンプル プログラムの設計」にC:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet
詳細があり、デフォルトの Windows WMQ クライアント インストールでサンプル プログラムを見つけることができます。サンプルに慣れ、そこからコードの一部を再利用することをお勧めします。完全なクライアントを実際にダウンロードしてインストールしていない場合は、SupportPac MQC75で無料のコピーを入手してください。その後、インストールするときに、SDK とサンプル コードをインストールするオプションを必ず選択してください。