Для чтения сообщения из очереди используется метод get экземпляра класса MQQueue.
public void get(MQMessage message) throws MQException
Данный метод извлекает сообщение из очереди и записывает его в заданный объект MQMessage.
MQQueueManager QM = new MQQueueManager("QM_test");
System.out.println("connected");
MQQueue q = QM.accessQueue("MY.QUEUE",
MQC.MQOO_INPUT_AS_Q_DEF);
MQMessage m = new MQMessage();
q.get(m);
// обработка сообщения m
String s = m.readLine();
System.out.print(s);
...
В том случае, если очередь пуста, метод сгенерирует исключение MQException с кодом причины MQException.MQRC_NO_MSG_AVAILABLE (код 2033).
try
{
...
q.get();
...
} catch(MQException e)
{
if (e.reasonCode == MQException.MQRC_NO_MSG_AVAILABLE)
System.out.println("очередь пустая");
...
}
При чтении сообщения из очереди можно указать дополнительные опции, используя класс MQGetMessageOptions.
Данный класс позволяет:
• определить интервал ожидания сообщения в очереди
• установить использование транзакций при чтении сообщения
• определить критерии поиска сообщения в очереди
• установить режим просмотра сообщений (сообщения будут прочитаны без удаления из очереди)
public void get(MQMessage message,
MQGetMessageOptions getMessageOptions)
throws MQException;
В следующем примере мы установим интервал ожидания поступления сообщения в очередь:
...
MQMessage m = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_WAIT;
gmo.waitInterval = 10000; // 10 секунд
q.get(m,gmo);
...
Поле waitInterval класса MQGetMessageOptions задает интервал ожидания поступления сообщения в очередь и используется вместе с опцией MQC.MQGMO_WAIT. В данном случае, метод get при наличии сообщения в очереди сразу вернет его программе. Если же очередь окажется пустой, метод в течение 10 секунд будет ждать поступления сообщения, и, если сообщение за это время не придет, метод сгенерирует исключение MQException.
Для параметра waitInterval можно установить специальное значение MQC.MQWI_UNLIMITED. В таком случае метод get будет ждать поступления сообщения бесконечно.
|