3

これは私が使用しているサンプルコードですが、メッセージが送信されたという応答を put または access キューから取得する方法がわかりません。

 mqQueue = mqQMgr.AccessQueue("Queue Name", MQC.MQOO_OUTPUT |
 MQC.MQOO_INPUT_SHARED |       MQC.MQOO_INQUIRE); 
 mqQueue.Put(mqMsg, mqPutMsgOpts);

PUT メソッドは void 戻り値の型です。たとえば、戻り値に基づいて bool だった場合、true/false、確認できます。メッセージはキューに送信されました。それが私の質問です。どうすれば元に戻すことができますかメッセージがキューに送信されるようにします。

どんな入力も非常に役に立ちます。

4

2 に答える 2

4

質問を明確にするコメントに従って更新します。

を try ブロックで囲み、.PUTをキャッチしMQExceptionます。noMQExceptionがスローされた場合、動作し、 PUTRC=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.MsgIDMQMD.CorrelIDフィールドに を入れますが、受信メッセージ ID を送信メッセージ ID に転送する場合もあります。

を発行する前にCOMMIT必ずを確認してください。そうしないと、返信がありません。PUTGET

これについては、情報センターのトピック「Request サンプル プログラムの設計」にC:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet詳細があり、デフォルトの Windows WMQ クライアント インストールでサンプル プログラムを見つけることができます。サンプルに慣れ、そこからコードの一部を再利用することをお勧めします。完全なクライアントを実際にダウンロードしてインストールしていない場合は、SupportPac MQC75で無料のコピーを入手してください。その後、インストールするときに、SDK とサンプル コードをインストールするオプションを必ず選択してください。

于 2013-02-25T23:40:04.517 に答える
1

メッセージがキューに送信されるように、確認応答を取得するにはどうすればよいですか

Put メソッドが例外をスローしない場合、それは MQ がメッセージをキューに入れたことを確認したことになります。

于 2013-02-26T16:37:08.797 に答える