2012-01-30 16 views
4

私のアプリケーションから、Websphere MQのキューごとの統計情報(最後のメッセージの取得/書き込み時間、エンキュー/デキューされたメッセージの数、現在のキューの深さ、接続されているクライアントの数)を照会する必要があります。 私はPCFAgent経由でキューの深さを取得することができましたが、IBMのドキュメントはかなり混乱していますので、残りの部分は固執しています。JavaでのMQキュー統計の取得

役立つ参考情報(またはコード例)をご存知ですか?

答えて

9

WMQクライアントをデフォルトの場所にインストールした場合、サンプルはC:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samplesになります。

UNIXフレーバでは、最終的に/opt/mqm/sampになります。

jarファイルを取得してクライアントをインストールしなかった場合は、サポートされている構成やサンプル、トレースユーティリティ、診断ツールなどはありません。クライアントインストールメディアは無料で入手できますSupportPacs pageにダウンロードしてください。現在利用可能な異なるクライアントは、次のとおりです。

  • バージョン6.0
  • (V6は2012年9月の人生の終わりである)SupportPac MQC6であるバージョン7.0 SupportPac MQC7
  • バージョン7.1であることを確認しますことを確認してくださいSupportPac MQC71

ですあなたが接続しているWebSphere MQ ServerのバージョンのInfocenterを見ています。また、v7 QMgrに接続してv6クライアントを使用している場合は、使用している定数やクラスによってv6の機能が制限されることにも注意してください。古いQMgrバージョンと常に下位互換性があるので、最新のクライアントを使用することをお勧めします。

UPDATE:

ここでは、要求された機能を実行するためにいくつかのコードスニペットです:

まず、キュー・マネージャーの接続(qmgr)が必要です。そして、あなたはPCFMessageAgentを作成することができます

// Create PCF Message Agent 
try { 
    pcfAgent = new PCFMessageAgent(qmgr); 
} catch (MQException mqe) { 
    System.err.println("PCF Message Agent creation ended with reason code " 
         + mqe.reasonCode); 
    return mqe.reasonCode; 
} 

あなたは(ENQ/DEQ数を除く)以下のコールを使用して、必要な属性のほとんどを得ることができます。最後のmsg get/put時間を得るには、キュー監視(MONQ)をオンにする必要があることに注意してください。

// Prepare PCF command to inquire queue status (status type) 
inquireQueueStatus = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_STATUS); 
inquireQueueStatus.addParameter(CMQC.MQCA_Q_NAME, "name of queue to inquire"); 
inquireQueueStatus.addParameter(CMQCFC.MQIACF_Q_STATUS_TYPE, CMQCFC.MQIACF_Q_STATUS); 
inquireQueueStatus.addParameter(CMQCFC.MQIACF_Q_STATUS_ATTRS, new int[] { 
        CMQC.MQCA_Q_NAME, CMQC.MQIA_CURRENT_Q_DEPTH, 
        CMQCFC.MQCACF_LAST_GET_DATE, CMQCFC.MQCACF_LAST_GET_TIME, 
        CMQCFC.MQCACF_LAST_PUT_DATE, CMQCFC.MQCACF_LAST_PUT_TIME, 
        CMQCFC.MQIACF_OLDEST_MSG_AGE, CMQC.MQIA_OPEN_INPUT_COUNT, 
        CMQC.MQIA_OPEN_OUTPUT_COUNT, CMQCFC.MQIACF_UNCOMMITTED_MSGS }); 

あなたは使用してPARMSを取り出すことができます。

pcfResp = pcfAgent.send(inquireQueueStatus); 

ザ・を個々のPARMSのためにあなたが(XXXXXXは、データのタイプである)getXXXXXParameterValueメソッドを使用することができます。 Enq/DEQがカウントのため

、あなたはキューの統計情報をリセットする必要があります。

// Prepare PCF command to reset queue statistics 
queueResetStats = new PCFMessage(CMQCFC.MQCMD_RESET_Q_STATS); 
queueResetStats.addParameter(CMQC.MQCA_Q_NAME, queueName); 

pcfResp3 = pcfAgent.send(queueResetStats); 

queueMsgDeqCount = pcfResp3[0].getIntParameterValue(CMQC.MQIA_MSG_DEQ_COUNT); 
queueMsgEnqCount = pcfResp3[0].getIntParameterValue(CMQC.MQIA_MSG_ENQ_COUNT); 

は、あなたがより多くの質問があるなら、私に教えてください。

+0

ListQueueDepthサンプルは、すでにキューの深さを取得するために使用したサンプルです。残念ながら、私が必要とする他の統計情報(最後のメッセージの取得/書き込み時間、エンキュー/デキューされたメッセージの数、接続されたクライアントの数)をカバーするサンプルは存在しないようです。 – CAFxX

+1

徹底的な返信をありがとう! enq/deqのカウントが統計をリセットする必要があるのは残念ですが、それは陳腐なものです。 – CAFxX

+1

私はそれを「WMQの量子API呼び出し」と呼んでいます。値を観測する行為は値を変更します。私はその行動も本当に好きではなかった。新しい機能「キュー統計を照会する」をリクエストする場合は、http://bit.ly/WMQReqのWMQリクエストフォームを使用してください –