1

QueueManager のキューのリストを列挙するこのコードを見つけました。動作しますが、多くのシステム キューが表示され、表示されるリストにはチャネル名も表示されます。「通常の」ユーザー定義キューであるかどうかを確認するためにテストできるプロパティはありますか? ObjectType、QueueType、Usage は、すべてのキュー名に対して常に同じ値を与えるように見えました。

            // GET QueueNames - this worked on 07/19/2012 - but returned a lot of system queue, and unclear how to separate user queues from system queues. 
            PCFMessageAgent agent = new PCFMessageAgent(mqQMgr);

            // Build the query request.
            PCFMessage requestMessage = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES);
            requestMessage.AddParameter(MQC.MQCA_Q_NAME, "*");

            // Send the request and retrieve the response.
            PCFMessage[] responses = agent.Send(requestMessage);

            // Retrieve the values requested from the response.
            string[] queueNames = responses[0].GetStringListParameterValue(CMQCFC.MQCACF_Q_NAMES);
            //string[] objType = responses[0].GetStringListParameterValue(CMQCFC.MQIACF_OBJECT_TYPE);

            int loopCounter = 0;
            foreach (string queueName in queueNames)
            {
                loopCounter++;
                Console.WriteLine("QueueName=" + queueName);
                try
                {
                    mqQueue = mqQMgr.AccessQueue(
                             queueName,
                             MQC.MQOO_OUTPUT                   // open queue for output
                             + MQC.MQOO_INQUIRE              // inquire required to get CurrentDepth 
                             + MQC.MQOO_FAIL_IF_QUIESCING);   // but not if MQM stopping


                    Console.WriteLine("QueueName=" + queueName +
                                      " CurrentDepth=" + mqQueue.CurrentDepth +
                                      " MaxDepth=" + mqQueue.MaximumDepth + 
                                      " QueueType=" + mqQueue.QueueType +
                                      " Usage=" + mqQueue.Usage
                                      );
                }
                catch (MQException mex)
                {
                    Console.WriteLine(mex.Message);
                }

            }
        }
4

2 に答える 2

2

私にとって、サンプルコードはキューのみをリストし、他のオブジェクトはリストしませんが、すべてのキューをリストします。別のフィルターrequestMessage.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_MODEL);を追加して、モデル キューのみを一覧表示できます。で使用できるその他の値MQC.MQIA_Q_TYPEMQC.MQQT_LOCALMQQT_ALIASMQQT_CLUSTERおよびMQC.MQQT_REMOTEです。

すべてのシステムまたは定義済みのキュー名は で始まりますSYSTEM。したがって、おそらくこの文字列を使用して、一覧表示後に定義済みのキューを除外できます。また、キュー定義を見ると、DEFTYPE 属性があり、システム定義のキューの値はPREDEFINEDです。しかし、DEFTYPE でキュー名をフィルタリングするための 3 番目のパラメーターを追加できませんでした。理由コード 3014 を受け取りました。

HTH

于 2012-07-20T17:41:37.813 に答える
1

Shashiが指摘したように、そのPCFコマンドからのキュー名のみが表示されます。

PAYROLLで始まる名前のみをキューに入れる場合は、以下を変更します。

requestMessage.AddParameter(MQC.MQCA_Q_NAME, "*");

requestMessage.AddParameter(MQC.MQCA_Q_NAME, "PAYROLL.*");

または、ifステートメントを追加して、表示したくないキュー名を除外します。

if (!(queueName.startsWith("SYSTEM.")))
{
   // do something
}
于 2012-07-20T19:37:33.317 に答える