Orden de mensajes estricto para los destinos del bus
Si debe mantenerse el orden de mensajes en todas las circunstancias, un destino se puede configurar de forma que el orden de los mensajes se conserve de forma mucho más rigurosa que para un destino normal.
En general, los mensajes creados por un solo generador para un único destino son visualizados por un consumidor de dicho destino en el mismo orden en el que se produjeron. Sin embargo, existen determinadas topologías y sucesos como, por ejemplo, las anomalías del sistema, que pueden modificar el orden de los mensajes (consulte Clasificación de mensajes, si desea más información). Si el orden de mensajes estricto es esencial, puede configurar un destino para preservar el orden de los mensajes de una forma mucho más rigurosa. Si se utiliza el orden de mensajes estricto, junto con topologías restringidas (tal como se describe más adelante en esta sección), se mantiene el orden de mensajes en todas las circunstancias.
Restricciones que se imponen de forma automática
- Se impide que los clientes simultáneos se conecten a un destino ordenado. Si se tiene más de un consumidor consumiendo de un destino, se podría provocar que los mensajes se consumieran sin seguir ningún orden. Por lo tanto, para un destino de cola ordenado y cualquier suscripción en un espacio de temas, un consumidor podrá, como máximo, conectarse a un destino cada vez. Esto equivale a establecer "recibir exclusivo" en true en un destino de cola y "Compartir suscripciones duraderas" en "nunca compartidas" en una fábrica de conexiones de tema JMS, y los avisos se generan en el archivo de registro del sistema para indicar si estas opciones se han alterado temporalmente. El consumidor conectado también está restringido a una sola transacción cada vez (es el comportamiento normal para muchas interfaces de mensajería, por lo tanto, no debería afectar a muchos usuarios, por ejemplo, JMS).
- Los mensajes consumidos parcialmente evitan que los mensajes posteriores se consuman. Para los destinos estándar (es decir, los destinos sin la opción de orden de mensajes estricto habilitada), los mensajes que se han consumido parcialmente desde el destino (por ejemplo, recibido dentro de una transacción que todavía no se ha comprometido), un consumidor podría ignorarlos para permitir el proceso de mensajes para continuar con los mensajes consumidos previamente que todavía no se han comprometido. Esto podría desorganizar el orden de los mensajes. Para un destino ordenado, el consumidor no ignora estos mensajes, en lugar de esto, se bloquea al consumidor hasta que el mensaje se elimine por completo (por ejemplo, la transacción no confirmadas de comprometes) o se sustituye (por ejemplo, se retrotrae la transacción no comprometida). Esta situación podría producirse si un consumidor, conectado previamente, no puede comprometer una transacción que se utilizó para consumir mensajes desde el destino, o si un recurso transaccional se vuelve no disponible temporalmente durante el compromiso de una transacción. Si el recursos no está disponible de forma permanente, consulte Resolución de transacciones dudosas para obtener más información sobre cómo resolver estas transacciones.
- Los beans controlados por mensajes (MDB) simultáneos están restringidos a un destino ordenado. Los valores máximos de puntos finales simultáneos y del tamaño de lote de un MDB desplegado en un destino ordenado se alteran temporalmente para que sean uno. Para obtener más información, consulte Especificación de activación JMS [Valores].Así se garantiza el proceso ordenado de los mensajes por parte del MDB. Si el sistema altera temporalmente esta propiedad en el tiempo de ejecución, se genera un aviso en el archivo de registro del sistema.
- Las mediaciones simultáneas están restringidas a un destino ordenado. El valor que permite la mediación simultánea de una mediación en un destino ordenado se modifica temporalmente y pasa a ser false. Para obtener más información, consulte el apartado Mediaciones simultáneas. Así se garantiza el proceso ordenado de mensajes por parte de la mediación. Si el sistema altera temporalmente esta propiedad en el tiempo de ejecución, se genera un aviso en el archivo de registro del sistema.
- Si se habilita Detener automáticamente puntos finales en anomalía de mensaje repetido, entonces se altera temporalmente Umbral de mensaje anómalo secuencial en 1.
- Efecto de habilitar la función Mantener el orden de mensajes estricto en un destino de tema existente. Si el orden de mensajes estricto se habilita en un destino de tema existente, cualquier suscripción duradera existente junto con los mensajes asociados ya no será válida. Cuando el orden de mensajes estricto está habilitado y el entorno se reinicia, las suscripciones duraderas existentes se suprimen y se vuelven a crear; los mensajes asociados a las suscripciones duraderas también se suprimen.
Restricciones adicionales que pueden afectar al orden de mensajes
- Si un destino tiene configurado un destino de excepción, es posible enviar los mensajes previstos para dicho destino al destino de excepción bajo condiciones de error como, por ejemplo, un mensaje supera su límite máximo de entregas erróneas. Esta redirección de mensajes podría considerarse si se modifica el orden de los mensajes y, en ese caso, el destino debería establecer el destino de excepción en "ninguna". Tenga en cuenta que establecer el destino de excepción en ninguna tendrá como consecuencia que mensajes, que de otro modo se moverían al destino de excepción, permanezcan en el destino.
- La modificación de la topología de un bus de integración de servicios puede afectar al orden de mensajes. Por ejemplo, suprimir y recrear un destino ordenado debe verse como dos destinos diferentes y, por lo tanto, el orden no se puede garantizar entre ambos destinos.
- La introducción o eliminación de una mediación puede afectar al orden de mensajes. Si una mediación se introduce en un destino o se elimina de un destino mientras los mensajes se están transmitiendo entre y a lo largo de los mensajes, el orden de mensajes no se conserva necesariamente.
- Las mediaciones pueden diseñarse para que afecten de forma deliberada el orden de mensajes y, por lo tanto, la modificación de una mediación puede afectar directamente el orden de mensajes. Por ejemplo, podría introducir una mediación que reordene los mensajes o los redireccione a diferentes destinos.
- Los destino de alias y los destinos foráneos no tienen una opción para mantener el orden de mensajes estricto. En cada caso, sólo se puede ordenar el destino subyacente.
- Si un destino de cola se despliega en un miembro del bus del clúster que tiene más de un motor de mensajería, que indica que el destino tiene más de un punto de cola o punto de mediación, el orden de mensajes no se puede mantener en el destino. Por lo tanto, habilitar el orden de mensajes estricto en dicho destino no garantiza el orden de mensajes. La configuración de la afinidad de mensajes permite enviar conjuntos de mensajes al mismo punto de cola para que un único consumidor los procese en orden. La afinidad de mensajes tiene implicaciones sobre el rendimiento ya que la carga de trabajo de los mensajes deja de estar equilibrada entre varios puntos de cola.Importante: El sistema no le impide el uso de destinos particionados. Es su responsabilidad garantizar que los destinos particionados no se utilicen en el sistema.
- Los mensajes con una fiabilidad diferente a seguro persistente podrían perderse o duplicarse bajo determinadas condiciones. Para obtener más información, consulte Niveles de fiabilidad de mensajes - modalidad de entrega JMS y calidad de servicio de integración de servicios.Si esto se tiene en cuenta, si se desorganiza el orden de mensajes, sólo los mensajes de seguro persistente deberán utilizarse con un destino ordenado estrictamente.
- El orden de mensajes se garantiza dentro de la prioridad del mensaje, debería sobreentenderse que los mensajes de una prioridad diferente pueden superar a los mensajes de una prioridad inferior.
- El orden de mensajes se garantiza dentro de la fiabilidad del mensaje, debería sobreentenderse que los mensajes de una fiabilidad pueden superar a los mensajes de una fiabilidad diferente.
- Aunque no está permitido que se conecten múltiples consumidores a un destino ordenado, pueden utilizarse múltiples generadores para enviar mensajes a destinos ordenados. El orden entre múltiples generadores no está garantizado si los mensajes aparecen en el destino en el orden en el que se comprometen las transacciones de envío.
- El código de aplicación puede contener lógica que interrumpe el orden de mensajes.