私のアプリケーションから、Websphere MQのキューごとの統計情報(最後のメッセージの取得/書き込み時間、エンキュー/デキューされたメッセージの数、現在のキューの深さ、接続されているクライアントの数)を照会する必要があります。 私はPCFAgent経由でキューの深さを取得することができましたが、IBMのドキュメントはかなり混乱していますので、残りの部分は固執しています。JavaでのMQキュー統計の取得
役立つ参考情報(またはコード例)をご存知ですか?
私のアプリケーションから、Websphere MQのキューごとの統計情報(最後のメッセージの取得/書き込み時間、エンキュー/デキューされたメッセージの数、現在のキューの深さ、接続されているクライアントの数)を照会する必要があります。 私はPCFAgent経由でキューの深さを取得することができましたが、IBMのドキュメントはかなり混乱していますので、残りの部分は固執しています。JavaでのMQキュー統計の取得
役立つ参考情報(またはコード例)をご存知ですか?
WMQクライアントをデフォルトの場所にインストールした場合、サンプルはC:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samples
になります。
UNIXフレーバでは、最終的に/opt/mqm/samp
になります。
jarファイルを取得してクライアントをインストールしなかった場合は、サポートされている構成やサンプル、トレースユーティリティ、診断ツールなどはありません。クライアントインストールメディアは無料で入手できますSupportPacs pageにダウンロードしてください。現在利用可能な異なるクライアントは、次のとおりです。
ですあなたが接続している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);
は、あなたがより多くの質問があるなら、私に教えてください。
ListQueueDepthサンプルは、すでにキューの深さを取得するために使用したサンプルです。残念ながら、私が必要とする他の統計情報(最後のメッセージの取得/書き込み時間、エンキュー/デキューされたメッセージの数、接続されたクライアントの数)をカバーするサンプルは存在しないようです。 – CAFxX
徹底的な返信をありがとう! enq/deqのカウントが統計をリセットする必要があるのは残念ですが、それは陳腐なものです。 – CAFxX
私はそれを「WMQの量子API呼び出し」と呼んでいます。値を観測する行為は値を変更します。私はその行動も本当に好きではなかった。新しい機能「キュー統計を照会する」をリクエストする場合は、http://bit.ly/WMQReqのWMQリクエストフォームを使用してください –