Как читать сообщения по порядку из Очереди с помощью MDB?

У меня есть MDB, которая слушает WebSphere MQ. Он не выбирает сообщения в том порядке, в котором они были получены очередью. Как я могу заставить его читать в этом порядке? Является ли это возможным? Должен ли я не использовать MDB.


person Vijayakumar G    schedule 30.11.2010    source источник


Ответы (2)


Как правило, WMQ доставляет сообщения в порядке их получения. Однако на это могут повлиять несколько вещей...

  1. Если для очереди установлен приоритет вместо доставки FIFO, а сообщения поступают с разными приоритетами, они будут доставлены «не по порядку».
  2. Различие между произведенным заказом и доставленным заказом. Если сообщения создаются на удаленном QMgr и существует несколько путей к локальному QMgr, сообщения могут поступать не по порядку.
  3. Разница в постоянстве - если сообщения создаются на удаленном QMgr и имеют разное постоянство, непостоянные сообщения могут приходить быстрее, чем постоянные, особенно с установленным каналом NPMSPEED(FAST).
  4. Несколько читателей/писателей. Любая зависимость от последовательности подразумевает, что один производитель отправляет одному потребителю по одному пути. Любая избыточность в производителях, потребителях или путях между ними может привести к тому, что сообщения будут доставляться не по порядку.
  5. Точка синхронизации. Чтобы сохранить последовательность, ВСЕ сообщения должны быть записаны и обработаны в точке синхронизации, иначе ВСЕ сообщения должны быть записаны и обработаны вне точки синхронизации.
  6. Селекторы. Они специально предназначены для доставки сообщений не по порядку относительно контекста всех сообщений в очереди.
  7. Группы сообщений. Получение сгруппированных сообщений обычно откладывается до тех пор, пока не появится вся группа. Если группы чередуются, сообщения доставляются не по порядку.
  8. DLQ — если целевая очередь заполняется, сообщения могут быть доставлены в DLQ. Когда целевая очередь опустошается, сообщения начинают возвращаться туда. Если очередь близка к заполнению, сообщения могут чередоваться между целевой очередью и DLQ.

Таким образом, когда MDB получает сообщения не по порядку, причиной может быть любая из этих вещей или даже несколько из них в комбинации. Либо устраните зависимость от последовательности сообщений (наилучший выбор), либо вернитесь к проекту и согласуйте все факторы, которые могут привести к нарушению последовательности обработки.

person T.Rob    schedule 11.12.2010

Чтобы добавить в список T.Rob, MDB используют сервер приложений WorkManager для планирования доставки сообщений, поэтому порядок сообщений также зависит от порядка, в котором WorkManager запускает рабочие элементы. Это вне контроля WMQ. Если вы ограничите глубину MDB ServerSessionPool до единицы, то это ограничение будет снято, так как всегда будет только один экземпляр Work в полете, но за счет снижения максимальной пропускной способности.

Если вы работаете на сервере приложений WebSphere, то режим без ASF с ListenerPorts может сохранить порядок сообщений с учетом некоторых предостережений по транзакциям/откату. Здесь есть техподдержка:

http://www-01.ibm.com/support/docview.wss?uid=swg21446463

person strmqm    schedule 19.07.2011