1

私はmo01javaサポートパックを使用して、SYSTEM.ADMIN.CHANNEL.EVENTキューからイベントメッセージを読み取ります。

以下はコードへのリンクです:

mo01java

以下のパラメータを除いて、チャネルイベントキューから消費されたPCFメッセージからすべてのパラメータ名/値を読み取ることができます。

ReasonQualifier
理由コードを修飾するIDを指定します。
識別子
MQIACF_REASON_QUALIFIER。
データ・タイプ
MQCFIN。
値
次のいずれか:
MQRQ_CHANNEL_STOPPED_OK
チャネルは、ゼロの戻りコードまたは警告の戻りコードのいずれかで閉じられました。

MQRQ_CHANNEL_STOPPED_ERROR
チャネルは閉じられましたが、エラーが報告され、チャネルは停止または再試行状態ではありません。

MQRQ_CHANNEL_STOPPED_RETRY
チャネルが閉じられ、再試行状態になっています。

MQRQ_CHANNEL_STOPPED_DISABLED
チャネルが閉じられ、停止状態になっています。

戻ってきた
いつも。

以下はコードの一部です、

マップreasonCodes=new HashMap();
   /**MQコマンドの名前と値のマップ。* /
   マップコマンド=newHashMap();
   /**MQ文字列の名前と値のマップ。* /
   マップstringNames=new HashMap();

プライベート文字列getStringName(int stringInt)
 {{
   return(String)stringNames.get(new Integer(stringInt));
 }
 / **
  *定数整数をMQコマンド名に変換します。
  * @paramstringIntMQ整数。
  *@return定数整数で表されるMQコマンド名。
  * /
 プライベート文字列getCommandName(int stringInt)
 {{
   return(String)commands.get(new Integer(stringInt));
 }
//以下のメソッドは、クラスからintコードの文字列値を取得し、HashMapに格納します

public void setupMaps()
 {{
   setupReasonNameSub( "com.ibm.mq.pcf.CMQC"、 "MQRC"、reasonCodes);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQCFC"、 "MQRC"、reasonCodes);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQCFC"、 "MQCMD"、コマンド);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQC"、 "MQCA"、stringNames);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQCFC"、 "MQCA"、stringNames);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQC"、 "MQIA"、stringNames);
   setupReasonNameSub( "com.ibm.mq.pcf.CMQC"、 "MQRQ"、reasonCodes);
 }

void readPCFMessage(PCFMessage pcfMessage){

列挙型pcfEnum=pcfMessage.getParameters();

stdout =
     stdout + "" + getReasonName(pcfMessage.getReason())+ "\ n";

 while(pcfEnum.hasMoreElements())
   {{

     文字列parameterName;
     PCFParameter elt =(PCFParameter)pcfEnum.nextElement();
     parameterName = getStringName(elt.getParameter());

     stdout = stdout + "";
     if(elt.getType()== CMQCFC.MQCFT_STRING_LIST)
     {{
       文字列strings[]=(String [])elt.getValue();
       for(int i = 0; i "+ strings [i] +" \ n ";
       }
     }
     そうしないと
       stdout = stdout + elt.getValue()。toString();
     stdout = stdout + "\ n";
   }

System.out.println(stdout);
}
出力:

MQRC_CHANNEL_STOPPED
QMGR1
CHL.TO.CHLA
SYSTEM.CLUSTER.TRANSMIT.QUEUE
172.21.33.123
9
0
0
0
CHL.TO.CHLA


チャネルが停止した場合、問題で停止したのか、通常のOKで停止したのかについての正確な理由を知りたいです。このパラメータは、チャネルが停止した正しい理由を示します。

このパラメータを取得できない理由はありますか?

4

1 に答える 1

0

インフォセンターの[イベントメッセージ/チャネル停止]ページには、返されたPCFメッセージのすべてのフィールドが一覧表示されます。私はあなたが投稿した回答にフィールドをマッピングしました:

QMgrName          MQCFST QMGR1
ReasonQualifier   MQCFIN 9
ChannelName       MQCFST CHL.TO.CHLA
ErrorIdentifier   MQCFIN 0
AuxErrorDataInt1  MQCFIN 0
AuxErrorDataInt2  MQCFIN 0
AuxErrorDataStr1  MQCFST ""
AuxErrorDataStr2  MQCFST ""
AuxErrorDataStr3  MQCFST ""
XmitQName         MQCFST SYSTEM.CLUSTER.TRANSMIT.QUEUE
ConnectionName    MQCFST 172.21.33.123

????              MQCFST CHL.TO.CHLA (See below)

このcmqc.hファイルは、理由コードを次のようにマクロにマップします。

 #define MQRQ_CHANNEL_STOPPED_OK        7
 #define MQRQ_CHANNEL_STOPPED_ERROR     8
 #define MQRQ_CHANNEL_STOPPED_RETRY     9
 #define MQRQ_CHANNEL_STOPPED_DISABLED  10

ハッシュキーと値を出力する場合、返された整数9はMQIACF_REASON_QUALIFIER、受け取っていないと主張する整数9を表し、nullが返される文字列を分類することになると思います。場違いに見える1つの値は、追加のチャネル名です。これは実際にはそうだと思いますが、AuxErrorDataStr1私はそれを????としてマッピングしました。提供された情報から確実に判断することはできないためです。

次の質問を予測できる場合は、「OKです。理由修飾子がチャネルが再試行したと言った場合、どこにありErrorIdentifierますか?」である可能性があります。その答えMQRQ_CHANNEL_STOPPED_RETRYは、エラーではないということです。これは通常のチャネル状態です。フィールドの説明には、エラーが原因ErrorIdentifierでチャネルが停止した場合、フィールドには値が含まれると記載されています。この場合、containsは何も含まないことが期待されます。ReasonQualifierMQRQ_CHANNEL_STOPPED_ERRORReasonQualifierMQRQ_CHANNEL_STOPPED_RETRYErrorIdentifier

MQRQ_CHANNEL_STOPPED_*ちなみに、これは少し誤称であることに注意してください。のチャネルRETRYは停止したとは見なされません。それは中間の状態にRUNNINGあり、再試行が終了するとまだ終了するか、再試行が成功した場合にSTOPPED戻る可能性があります。RUNNINGただし、イベントは、実行中またはアイドル状態から機能の低下した状態に変化するチャネルを記録するために生成されます。

「このパラメータを取得できない理由について何か考えがありますか?」という質問に直接答えるには。パラメータを取得できないという前提に挑戦します。コードを変更して、キーと値を出力すると、探している理由修飾子として整数9の値が表示されると思います。

于 2012-11-03T13:29:29.767 に答える