JMS Inicio rápido
A menudo puede que desee configurar un par de conectores: uno para enviar y otro para recibir mensajes de/a un destino. Esta guía explica cómo hacer esto utilizando JMS.
Para ejemplos más completos sobre el uso de conectores para consumir y producir mensajes en general, consulte Solicitud-Respuesta Asincrónica.
Paso 1: Agregue connector-jms dependencia
La dependencia que debe agregar a su pom.xml es:
<dependency>
<groupId>com.iconsolutions.ipf.core.connector</groupId>
<artifactId>connector-jms</artifactId>
</dependency>
Si importa el BOM de Icon, o utilizando el BOM de Icon Como padre, no es necesario proporcionar una versión separada.
Paso 2: Configuración
Configuración del conector-en general-está fuertemente impulsado por la configuración. La configuración nos permite especificar:
-
Nombres de Cola/Tema
-
Configuración del consumidor/productor JMS
-
Reiniciar configuraciones (en caso de fallo)
Aquí tiene un ejemplo de un bloque de configuración para un par de conectores de envío y recepción que conectaremos a nuestro `ConnectorTransport`s, para el sistema de reservas de un banco ficticio que presenta un tema de solicitud y respuesta:
mybank.booking {
producer { (1)
queue = "mybank.booking.request" (2)
}
consumer { (3)
queue = "mybank.booking.response" (4)
}
}
Si se produce a un IBM MQ cola, el comportamiento predeterminado es producir un mensaje con un MQRFH2 encabezado. Esto puede causar problemas si la aplicación que consume el mensaje es una no-JMS aplicación. En tales casos, especificar queue:///$<queueName>? targetClient=1 producirá el mensaje sin el MQRFH2 encabezado. Así que en el ejemplo anterior, la propiedad de la cola sería "queue:///mybank.booking.request?targetClient=1" para producir mensajes sin un MQRFH2 encabezado.Para más información, consulte:https://www.ibm.com/docs/en/ibm-mq/9.3? topic=conversion-jms-message-types |
| 1 | Esto se conoce como la ruta raíz de configuración y se hará referencia en el código. Indica dónde en la aplicación configuración para buscar esto Send Connector Configuraciones de transporte |
| 2 | La cola a la que enviar |
| 3 | La ruta raíz de configuración a la JMS consumidor |
| 4 | La cola para recibir de |
Paso 2.1: Configuración Común
Por defecto-el JMS La configuración que usted especifique aquí volverá a la alpakka.jakarta-jms.consumer y
`alpakka.jakarta-jms.producer`ajustes.
Lo que esto significa es que usted puede simplemente especificar alpakka.jakarta-jms.consumer or alpakka.jakarta-jms.producer configuraciones para globalmente
configure todo JMS configuraciones para todos JMS consumidores y productores. Por ejemplo:
alpakka.jakarta-jms.consumer.acknowledge-mode = client
alpakka.jakarta-jms.producer.session-count = 10
Si-por ejemplo-uno específico JMS El productor o consumidor tiene diferentes configuraciones, puede ser configurado de la siguiente manera:
alpakka.jakarta-jms.producer.session-count = 10
mybank.booking.producer.session-count = 1
La configuración anterior significa que todos JMS productores-aparte del productor de reservas-tendrá 10 JMS Sesión instancias, y el productor de reservas solo tendrá una.
Paso 3: Crear Send Connector Transporte
Aquí tiene un ejemplo de cómo un SendConnectorTransport puede ser creado para JMS:
var sendingTransport = JmsConnectorTransport.builder()
.withName("accounts-booking-send-transport") (1)
.withActorSystem(actorSystem)
.withConfigRootPath("mybank.booking.producer") (2)
.withConnectionFactory(connectionFactory) (3)
.build();
| 1 | Dé el ConnectorTransport un nombre significativo |
| 2 | Usando el mybank.booking.producer clave de configuración definida en Step 2 |
| 3 | Proporcione un JMS ConnectionFactory aquí |
Paso 4: Crear Receive Connector Transporte
Receive Connector Configuración de Transporte
Dos JMS Receive Connector Existen tipos de transporte disponibles que cada uno admite diferentes requisitos de confirmación de mensajes:
JmsReceiveConnectorTransport
Al utilizar este transporte, no se envían confirmaciones de mensajes de vuelta al corredor, ya que los mensajes se consideran automáticamente confirmados al ser entregados.
JmsAckReceiveConnectorTransport
Este transporte utiliza CLIENT_ACKNOWLEDGEMENT modo, donde el receptor reconoce explícitamente los mensajes después de que han sido procesados con éxito.
Es importante señalar que los reconocimientos en este modo son a nivel de sesión: reconocer un mensaje reconoce todos los mensajes entregados previamente en esa sesión. Por lo tanto, los requisitos de entrega al menos una vez garantizan que max-pending-acks establecerse en 0. Con esta configuración, se puede lograr un aumento en el rendimiento del consumo de mensajes aumentando el session-count valor de la propiedad.
Predeterminado JMS Recibir configuración de transporte
Además de la configuración común del consumidor extendida desde Alpakka(cubierto en Step 2), el predeterminado JMS La configuración de Recepción de Transporte aplica las siguientes anulaciones:
default-consumer = {
connection-retry {
max-retries = -1
}
# https://doc.akka.io/docs/alpakka/current/jms/consumer.html#configure-jms-consumers
# The sessionCount parameter controls the number of JMS sessions to run in parallel.
session-count = 5
# max-pending-acks - Maximum number of acknowledgements queued before they are sent to the broker.
# at-least-once message delivery guarantees can be achieved by setting max-pending-acks to 0.
max-pending-acks = 0
# health check settings for this consumer
health-check-settings = ${jms.health-check-settings}
}
Crear Receive Connector Transporte
Aquí está cómo crear un ConnectorTransport para recibir mensajes a través de JMS:
var receivingTransport = JmsReceiveConnectorTransport.builder() (1)
.withName("accounts-booking-send-transport") (2)
.withActorSystem(actorSystem)
.withConfigRootPath("mybank.booking.consumer") (3)
.withConnectionFactory(connectionFactory) (4)
.build();
| 1 | Puede usar JmsReceiveConnectorTransport or JmsAckReceiveConnectorTransport constructor aquí, dependiendo del comportamiento de reconocimiento requerido |
| 2 | Dé el ConnectorTransport un nombre significativo |
| 3 | Usando el mybank.booking.consumer clave de configuración definida en Step 2 |
| 4 | Proporcione un JMS ConnectionFactory aquí |