2011-01-13 2 views
0

Я использую IBM Websphere MQ. У меня есть менеджер очереди и имя очереди. Теперь я хочу проверить, есть ли в очереди какие-либо сообщения?Как проверить, есть ли сообщение в очереди

Я не работал над этим раньше. Помощь с удовольствием

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

Благодаря

+0

Просьба указать, какая платформа/язык разработки? Java, C# и т. Д. – StuartLC

+0

Прошу прощения, что на Java –

ответ

7

Ниже код .NET/amqmdnet - но вы можете попробовать и преобразовать это в то же время, пока DEV Java не видит ваш пост.

Чтобы узнать, есть ли сообщение в очереди, фактически не снимая его очередь, используйте MQC.MQOO_BROWSE на очереди и IBM.WMQ.MQC.MQGMO_BROWSE_FIRST в качестве опции Вы получите MQRC_NO_MSG_AVAILABLE, если очередь пуста.

MQQueueManager queueManager = null; 
    MQQueue queue = null; 
    MQMessage queueMessage = new MQMessage(); 

    queueManager = new MQQueueManager(qmName, channelName, connName); 
    queue = queueManager.AccessQueue(qName, 
     MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING); 

    MQGetMessageOptions opt = new MQGetMessageOptions(); 
    opt.Options = IBM.WMQ.MQC.MQGMO_BROWSE_FIRST; 
    queueMessage.CorrelationId = IBM.WMQ.MQC.MQMI_NONE; 
    queueMessage.MessageId = IBM.WMQ.MQC.MQMI_NONE; 
    queue.Get(queueMessage, opt); 
    String sMessage = queueMessage.ReadString(queueMessage.DataLength); 

Для просмотра следующего сообщения используйте IBM.WMQ.MQC.MQGMO_BROWSE_NEXT;

Чтобы действительно прочитать сообщение OFF, используйте MQC.MQOO_INPUT_SHARED в AccessQueue.

+1

Вы также можете использовать 'MQINQ' для запроса атрибута' MQIA_CURRENT_Q_DEPTH'. Преимущество в том, что вы можете установить защиту по-разному на 'MQGET' и' MQINQ'. Это позволяет пользователю мониторинга получать доступ к атрибутам очереди, но не обязательно разрешается просматривать или получать. – Stavr00

0

Ответ не показывал, как проверить MQRC_NO_MSG_AVAILABLE. Вот мое решение. Если есть лучшие, пожалуйста, дайте мне знать.

try 
{ 
    queue.Get(queueMessage, opt); 
    String sMessage = queueMessage.ReadString(queueMessage.DataLength); 
} 
catch (MQException err) 
{ 
    if (err.ReasonCode.CompareTo(MQC.MQRC_NO_MSG_AVAILABLE) == 0) 
     return true; 
} 
0

для Windows машины Это зависит от того, где ваш менеджер очереди.

Вы можете использовать MQUtilities - ih03 пакет - который имеет rfhUtil.exe (Local Qm) и rfhUtilC.exe (для удаленного QM)

Для местного QM, это прямо вперед, вам необходимо поместить соответствующие значения и нажмите browse, он покажет вам глубину очереди.

Для удаленного QM, место/TCP/(PortNo) для имени менеджера очереди и очереди для имени очереди. Хит-обзор, и вы узнаете глубину очереди.

Для версий Unix/Ubuntu/Linux - есть продукт под названием MQVisualEdit, который похож на этот.

Смежные вопросы