2010-11-30 11 views

Respuesta

5

En general, WMQ entrega mensajes en el orden en que fueron recibidos. Sin embargo, varias cosas pueden afectar eso ...

  1. Si la cola se establece en prioridad en lugar de la entrega FIFO y los mensajes llegan en prioridades diferentes, se entregarán "fuera de servicio".
  2. Distinga entre pedido producido y pedido entregado. Si los mensajes se producen en un QMgr remoto y existen múltiples rutas al QMgr local, los mensajes pueden llegar a estar fuera de servicio.
  3. Diferencia en la persistencia: si los mensajes se producen en un QMgr remoto y tienen diferentes persistencias, los mensajes no persistentes pueden llegar más rápido que los persistentes, especialmente con el canal NPMSPEED (FAST) establecido.
  4. Múltiples lectores/escritores: cualquier dependencia en la secuencia implica que un solo productor envíe a un único consumidor en una sola ruta. Cualquier redundancia en los productores, consumidores o rutas entre ellos puede resultar en mensajes entregados fuera de secuencia.
  5. Punto de sincronización: para conservar la secuencia, TODOS los mensajes deben escribirse y consumirse en el punto de sincronización o TODO debe escribirse y consumirse fuera del punto de sincronización.
  6. selectores - Estos específicamente están destinados a entregar mensajes fuera de servicio con respecto al contexto de todos los mensajes en la cola.
  7. Grupos de mensajes: la recuperación de mensajes agrupados suele esperar hasta que todo el grupo esté presente. Si los grupos están intercalados, los mensajes se entregan fuera de secuencia.
  8. DLQ: si la cola de destino se llena, los mensajes se pueden entregar al DLQ. A medida que se agota la cola de destino, los mensajes comienzan a volver allí. Con una cola cerca de su capacidad, los mensajes pueden alternar entre la cola de destino y DLQ.

De modo que cuando un MDB recibe mensajes desordenados, cualquiera de estas cosas, o incluso varias de ellas en combinación, pueden estar causadas. Elimine la dependencia de la secuencia de mensajes (la mejor opción) o vuelva sobre el diseño y concilie todos los factores que pueden conducir al procesamiento fuera de secuencia.

3

Para agregar a la lista de T.Rob, los MDB utilizan el servidor de aplicaciones WorkManager para programar la entrega de mensajes, por lo que el orden de los mensajes también depende del orden en que WorkManager inicia los elementos de Trabajo. Esto está fuera del control de WMQ. Si limita la profundidad de MDB ServerSessionPool a uno, este límite se eliminará, ya que solo habrá una instancia de trabajo en vuelo, pero a costa de reducir el rendimiento máximo.

Si está ejecutando en el servidor de aplicaciones WebSphere, el modo no ASF con ListenerPorts puede conservar el orden de los mensajes sujeto a algunas advertencias transaccionales/de retroceso. Hay una nota técnica de soporte aquí:

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

Cuestiones relacionadas