Arquitetura de microsserviço - envie mensagens através de serviços quando o pedido não importa

Tl; dr: "Como posso enviar uma mensagem por vários microsserviços assíncronos e não ordenados e saber quando essa mensagem passou por cada um deles?"

Estou com dificuldades para encontrar o sistema / protocolo de mensagens correto para uma arquitetura específica de microsserviços. Esta não é uma pergunta "qual é a melhor", mas uma pergunta sobre quais são minhas opções para um padrão / protocolo de design.

eu tenho ummensagem na fila inicial. Digamos que uma mensagem RabbitMQ com JSON serializadoPreciso que essa mensagem passe por um número arbitrário de microsserviçosCada um desses microsserviços é de longa duração, deve ser independente e pode ser implementado em vários idiomasA ordem dos serviços pelos quais a mensagem passa não importa. De fato, não deve ser síncrono.Cada serviço podeacrescentar dados para a mensagem original, mas esses dados são ignorados pelos outros serviços. Deve havernão conflitos de mesclagem (cada serviço grava uma chave exclusiva). Nenhum serviço irá alterar ou destruir dados.Uma veztodos os serviços tiveram sua vez, a mensagem deve ser publicada em uma segunda fila do RabbitMQ com os dados originais e os novos dados.Os microsserviços não terão outros efeitos colaterais. Se tudo isso estivesse em um aplicativo monolítico (e no mesmo idioma), a programação funcional seria perfeita.

Então, a pergunta é: qual é a maneira apropriada de gerenciar essa mensagem através dos vários serviços? Eunão deseja fazer um de cada vez, e o pedido não é importante. Mas, se for esse o caso, como o sistema pode saber quando todos os serviços tiveram seu ataque e a mensagem final pode ser gravada na fila final (para que o próximo lote de serviços esteja pronto).

A única solução semi-elegante que eu consegui encontrar foi

para ter o primeiro serviço que encontrar uma mensagem, grave essa mensagem no armazenamento comum (por exemplo, mongodb)Faça com que cada serviço faça seu trabalho, marque que foi concluída para essa mensagem e verifique se todos os serviços tiveram sua vezNesse caso, esse último serviço publicaria a mensagem

Mas isso ainda exige que cada serviço esteja ciente de todos os outros serviçose exige que cada serviço deixe sua marca. Nenhuma delas é desejada.

Estou aberto a um serviço de "pastor" de algum tipo.

Eu apreciaria todas as opções que eu perdi e estou disposto a admitir que a sua pode ser um design melhor e fundamental.

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion