Arquitectura de microservicios: transporte de mensajes a través de servicios cuando el orden no importa

Tl; dr: "¿Cómo puedo enviar un mensaje a través de un montón de microservicios asíncronos y desordenados y saber cuándo ese mensaje ha llegado a través de cada uno de ellos?"

Estoy luchando por encontrar el sistema / protocolo de mensajería adecuado para una arquitectura específica de microservicios. Esta no es una pregunta "cuál es la mejor", sino una pregunta sobre cuáles son mis opciones para un patrón / protocolo de diseño.

tengo unmensaje en la cola de inicio. Digamos un mensaje RabbitMQ con JSON serializadoNecesito ese mensaje para pasar por un número arbitrario de microserviciosCada uno de esos microservicios es de larga duración, debe ser independiente y puede implementarse en una variedad de idiomas.El orden de los servicios por los que pasa el mensaje no importa. De hecho, no debe ser sincrónico.Cada servicio puedeadjuntar datos al mensaje original, pero esos datos son ignorados por los otros servicios. Debería haberNo fusionar conflictos (cada servicio escribe una clave única). Ningún servicio cambiará ni destruirá los datos.Una veztodos los servicios han tenido su turno, el mensaje debe publicarse en una segunda cola RabbitMQ con los datos originales y los nuevos datos.Los microservicios no tendrán otros efectos secundarios. Si todo esto fuera en una sola aplicación monolítica (y en el mismo lenguaje), la programación funcional sería perfecta.

Entonces, la pregunta es, ¿cuál es una forma adecuada de administrar ese mensaje a través de los diversos servicios? yono lo hagas quiere tener que hacer uno a la vez, y el orden no es importante. Pero, si ese es el caso, ¿cómo puede saber el sistema cuándo todos los servicios han tenido su golpe y el mensaje final se puede escribir en la cola final (para que el próximo lote de servicios tenga su oportunidad).

La única solución semi-elegante que se me ocurrió fue

para tener el primer servicio que encuentra un mensaje, escriba ese mensaje en el almacenamiento común (por ejemplo, mongodb)Haga que cada servicio haga lo suyo, marque que se ha completado para ese mensaje y luego verifique si todos los servicios han tenido su turnoSi es así, ese último servicio publicaría el mensaje

Pero eso todavía requiere que cada servicio sea consciente de todos los demás serviciosy requiere que cada servicio deje su marca. Ninguno de esos es deseado.

Estoy abierto a un servicio de "Pastor" de algún tipo.

Agradecería cualquier opción que me haya perdido, y estoy dispuesto a admitir que puede ser un diseño mejor y fundamental.

Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta