Как читать сообщения в порядке из очереди, используя MDB? - PullRequest
5 голосов
/ 30 ноября 2010

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

Ответы [ 2 ]

5 голосов
/ 12 декабря 2010

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

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

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

3 голосов
/ 19 июля 2011

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

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

http://www -01.ibm.com / поддержка / docview.wss? UID = swg21446463

...