Нужно получить Старую MQMessage От MQQueue - PullRequest
1 голос
/ 18 февраля 2011

Привет, я новичок в IBM MQ. Здесь мое требование состоит в том, чтобы получить самый старый MQMessage из MQQueue независимо от установленного приоритета и отобразить его в JSP для некоторой цели мониторинга. В существующем коде

qMgr = new MQQueueManager(qManager);

    int openOptions = MQC.MQOO_INQUIRE | MQC.MQOO_BROWSE|MQC.MQOO_INPUT_SHARED;
    MQQueue eventQueue = qMgr.accessQueue(qName, openOptions, null, null, null);
    MQMessage retrievedMessage = new MQMessage();   
    MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = MQC.MQGMO_BROWSE_FIRST;
    eventQueue.get(retrievedMessage, gmo); 

Здесь я могу получить MQMessage, но это может быть не самое старое сообщение в очереди. Я понятия не имею об этом. Пожалуйста, помогите мне, есть ли способ получить это.

1 Ответ

1 голос
/ 18 февраля 2011

Если очередь FIFO, то ваш обзор вернет самое старое сообщение.Но если очередь настроена на приоритетную доставку, вам придется просматривать очередь до тех пор, пока вы не найдете первое сообщение с самым низким приоритетом.Ваш фрагмент кода указывает, что это очередь событий.Если это относится к очередям SYSTEM. *. EVENT, то они всегда должны быть в режиме FIFO.Даже если администратор меняет их на приоритетную доставку, все сообщения о системных событиях создаются с одинаковым приоритетом.

Сложность, с которой вы сталкиваетесь с сообщениями с упорядоченным приоритетом, заключается в том, что можно игнорировать более низкие приоритеты, но не более высокие приоритеты.Например, если вы укажете приоритет 5 в вашем просмотре, и какие-либо сообщения будут иметь приоритет 4 или ниже, они не будут возвращены.Но будут возвращены сообщения или более высокий приоритет, а не только сообщения с приоритетом 5, а скорее сообщения с приоритетом 9, за которыми следуют сообщения с приоритетом 8 и так далее.Таким образом, вы не сможете выборочно просматривать первое сообщение в каждом приоритете, но вместо этого будете вынуждены просматривать, пока не найдете первое сообщение с приоритетом 0, чтобы знать, что вы видели самое старое сообщение в очереди, если для порядка доставки очереди задано значениеПриоритет.

Возможно, стоит пересмотреть методы в com.ibm.mq.pcf , чтобы узнать, как запрашивать атрибуты очереди.Если очередь FIFO, просто просмотрите первое сообщение.Если нет, просмотрите длину очереди, сохраняя первое сообщение, полученное от каждого приоритета, сравните метку времени с любым сообщением с более высоким приоритетом и отбросьте более новое.

Обратите внимание, что транзакции повлияют на вашу способность просматривать сообщения.Любое сообщение, сохраненное в syncpoint, будет недоступно для просмотра.Будет возвращено самое старое сообщение, не находящееся в точке синхронизации.

Наконец, если вы пытаетесь определить работоспособность очереди Интервал обслуживания очереди события или статистика QStatus может предоставитьчто вам нужно, и избежать лишних затрат при просмотре глубоких очередей.

...