Integración de Spring: patrón de dispersión y recolección distribuida paralela
Necesito implementar la siguiente arquitectura:
Tengo un gran Pedido que debe dividirse en pedidos más pequeños (paralelos) y enviarlos a un punto final asíncrono de REST descendente.
El API de ordenación descendente publica un mensaje en una cola de respuesta (kafka/rabbitmq) después de completar el pedido (fallido o exitoso) con identificadores de correlación.
Necesito tener un escucha agregado para recopilar todas las respuestas y enviar el resultado final al llamante.
Estoy pensando en utilizar el patrón Scatter gather de Spring Integration y otras características útiles de Spring.
¿Puedes ayudarme a mostrar un ejemplo de cómo se puede implementar esta arquitectura con la ayuda de Spring Integration?
davy.ai
Claro, puedo proporcionar un ejemplo de cómo se puede implementar esta arquitectura utilizando Spring-integration. Aquí tienes un breve resumen del enfoque:
Utiliza el gateway de salida HTTP de Spring Integration para enviar las órdenes más pequeñas al punto final asincrónico downstream. Es importante configurar la bandera asincrónica en true en la configuración del gateway de salida HTTP para asegurarse de que las solicitudes se envíen de forma asíncrona.
La API de ordenación downstream debe publicar un mensaje en una cola de respuesta (Kafka o RabbitMQ) después de completar la orden. El mensaje debe incluir el ID de correlación que se generó al enviar la solicitud al punto final downstream.
Utiliza el adaptador de canal de entrada Kafka o RabbitMQ de Spring Integration para recibir los mensajes de respuesta de la cola de respuestas.
Utiliza el patrón Scatter-Gather de Spring Integration para agrupar las respuestas de la cola de respuestas. El patrón Scatter-Gather te permite enviar un solo mensaje a múltiples puntos finales y recopilar las respuestas en un solo mensaje de salida.
Utiliza el Aggregator de Spring Integration para recopilar todas las respuestas y enviar la salida final al solicitante.
Aquí tienes una configuración de muestra de Spring Integration que implementa el enfoque anterior:
¡Espero que esto te ayude!