Inicio Rápido del Conector de Recepción
Esta página proporciona detalles sobre cómo comenzar a recibir mensajes de sistemas externos, utilizando conectores de recepción proporcionados por la biblioteca de conectores.
Dependencias
Antes de construir un conector de recepción, el connector-core la biblioteca debe ser incluida como una dependencia.
<dependency>
<groupId>com.iconsolutions.ipf.core.connector</groupId>
<artifactId>connector-core</artifactId>
<version>${connector.version}</version>
</dependency>
La última versión de la biblioteca de conectores se puede encontrar utilizando este Búsqueda de Nexus.
A menos que proporcione su propia implementación, al menos una biblioteca de transporte debe ser declarada.
El esquema de nomenclatura para todos los transportes incluidos en la biblioteca de conectores es connector-[transport], donde [transport] coincide con el esquema de transporte que este conector debe utilizar.
Para más detalles sobre connector transport s consulte el Connector Transports documentación.
Aquí tiene un ejemplo de declarar la dependencia para utilizar JMS.
<dependency>
<groupId>com.iconsolutions.ipf.core</groupId>
<artifactId>connector-jms</artifactId>
<version>${connector.version}</version>
</dependency>
Introducción: Conector de Recepción
Los conectores de recepción se utilizan para recibir mensajes, ya sea como respuesta a un mensaje enviado previamente o a una nueva solicitud.
Patrón de Constructor
Los conectores de recepción se instancian utilizando el patrón de constructor. Esto se debe a que los conectores tienen muchos parámetros que configurar y la mayoría son opcionales o tienen valores predeterminados.
Veamos cómo utilizamos el patrón de constructor para instanciar un conector receptor.
Al construir un conector de recepción, lo configuramos para que sea un receptor iniciador o un receptor de respuesta. Un receptor iniciador recibe solicitudes de un sistema externo, mientras que un receptor de respuestas espera que los mensajes sean respuestas a solicitudes realizadas previamente a través de un sending connector.
Iniciando Receptor
El siguiente ejemplo demuestra las propiedades mínimas que deben ser proporcionadas al construir un iniciador.receive connector.
ReceiveConnector<ExampleType> connector = ReceiveConnector
.<ExampleType>builder("ExampleSystem") (1)
.withConnectorTransport(transport) (2)
.withReceiveTransportMessageConverter(converter) (3)
.withProcessingContextExtractor(processingContextExtractor) (4)
.withReceiveHandler(receiver) (5)
.withActorSystem(actorSystem) (6)
.build();
| 1 | Establece el nombre del conector. El nombre debe representar a qué se está conectando el conector. |
| 2 | Proporciona una implementación del ReceivingConnectorTransport interfaz. |
| 3 | Proporciona una implementación del ReceiveTransportMessageConverter interfaz.
Toma el recibido TransportMessage y lo convierte al tipo objetivo T(ExampleType en este caso). |
| 4 | Proporciona una implementación del ProcessingContextExtractor interfaz.
Este campo es lo que hace de este un conector de recepción inicial, ya que extrae (o genera) un ProcessingContext desde el mensaje en lugar de obtener uno del servicio de correlación como sería el caso en un conector que recibe respuestas. |
| 5 | Una implementación de ReceiveHandler.
Aquí es donde iría la lógica de la aplicación para decidir cómo manejar las solicitudes. |
| 6 | Establece el sistema de actores utilizado en toda la aplicación. |
Receptor de Respuesta
El siguiente ejemplo demuestra cómo construir un conector de recepción de respuesta mínima.
ReceiveConnector<ExampleType> connector = ReceiveConnector
.<ExampleType>builder("connector-name") (1)
.withConnectorTransport(transport) (2)
.withReceiveTransportMessageConverter(converter) (3)
.withCorrelationIdExtractor(correlationIdExtractor) (4)
.withCorrelationService(correlationService) (5)
.withReceiveHandler(receiver) (6)
.withActorSystem(actorSystem) (7)
.build();
| 1 | Establezca el nombre del conector. El nombre debe representar a qué se está conectando el conector. |
| 2 | Proporciona una implementación del ReceivingConnectorTransport interfaz. |
| 3 | Proporciona una implementación de la ReceiveTransportMessageConverter interfaz.
Toma el recibido TransportMessage y lo convierte al tipo objetivo,ExampleType en este caso. |
| 4 | Proporciona una implementación del CorrelationIdExtractor interfaz.
Toma el mensaje recibido y extrae el identificador de correlación para que podamos correlacionarlo con la solicitud original realizada a través de un sending connector. |
| 5 | Proporciona una implementación del CorrelationService interfaz.
El servicio de correlación toma el identificador de correlación extraído y devuelve el ProcessingContext asociado que se utilizó cuando se envió la solicitud original a través de un sending connector. |
| 6 | Una implementación de ReceiveHandler.
Aquí es donde iría la lógica de la aplicación para decidir cómo manejar las respuestas. |
| 7 | Establece el sistema de actores utilizado en toda la aplicación. |
Comience a Recibir Mensajes
El paso final es iniciar el conector llamando a su método de inicio. En este punto, usted debe tener un conector que pueda recibir mensajes a través del transporte configurado.
Para referencia, la configuración predeterminada es.
default-receive-connector {
manual-start = true
receiver-parallelism-type = ORDERED_PARTITIONED
receiver-parallelism-per-partition = 1
resiliency-settings = ${ipf.connector.default-resiliency-settings}
}
-
application.conf
example-receive-connector {
manual-start = false
throttle-count = 5
throttle-duration = 10s
}
Los valores que pueden ser configurados a través de las propiedades de configuración se muestran en la siguiente tabla.
| Propiedad | Descripción | Ejemplo |
|---|---|---|
|
Cuando se establece en |
verdadero |
|
Si se establece el valor, limita el rendimiento a un número específico de mensajes consumidos por unidad de tiempo. Si está configurado. Si este valor está establecido, también debe establecerse la duración del estrangulador. |
10 |
|
Si se establece, se utiliza junto con |
1s |
|
Si se establece, limita el número de concurrentes mapping operaciones ejecutadas sobre los mensajes consumidos. |
número de procesadores disponibles |
|
Define la forma en que se manejan los mensajes en paralelo.
|
ORDERED_PARTITIONED |
|
Si se establece, limita el número de mensajes mapeados que se permiten procesar de manera concurrente. |
número de procesadores disponibles |
|
Solo se aplica si |
1 |
|
Los ajustes de resiliencia que se utilizarán al recibir. Para más detalles, consulte el Resiliencia documentación. |