Получение статистики MQ-очереди в Java - PullRequest
4 голосов
/ 30 января 2012

Из моего приложения мне нужно запросить некоторую статистику по каждой очереди Websphere MQ (время получения / отправки последнего сообщения, количество сообщений en / dequeued, текущая глубина очереди, количество подключенных клиентов).Мне удалось получить глубину очереди через PCFAgent, но я застрял на остальном, потому что документация IBM довольно запутанная.

Знаете ли вы какие-либо полезные ссылки (или примеры кода), которые могут помочь?

1 Ответ

9 голосов
/ 31 января 2012

Если вы установили клиент WMQ в папку по умолчанию, то примеры будут по адресу: C:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samples.

В версиях UNIX они заканчиваются на /opt/mqm/samp.

Если вы просто захватили jar-файлы и не установили клиент, то у вас не будет поддерживаемой конфигурации - или примеров, утилит трассировки, средств диагностики и т. Д. И т. Д. И т. Д. Установочный носитель клиента доступен для бесплатной загрузки. на странице SupportPacs . В настоящее время доступны следующие клиенты:

Убедитесь, что вы ищете в информационном центре версию WebSphere MQ Server, к которой вы подключаетесь. Также обратите внимание, что если вы подключаетесь к QMgr v7 и используете клиент 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) приведенный ниже вызов. Обратите внимание, что для получения последнего сообщения о времени получения \ ввода вам нужно включить мониторинг очереди (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 });

Вы можете получить пармы, используя:

pcfResp = pcfAgent.send(inquireQueueStatus);

Для каждого отдельного параметра вы можете использовать метод getXXXXXParameterValue (XXXXXX - это тип данных).

Для подсчета 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);

Дайте мне знать, если у вас есть еще вопросы.

...