OK, então. Pelo que entendi você tem isso:
DataSource - pushes occasional messages to Clients
Client - Listens for datasource messages
Problema: Como o DataSource envia mensagens intermitentemente, se ele morrer, os clientes não serão informados e continuarão exibindo os dados antigos e agora inválidos.
Solução antiga:
DataSource - pushes occasional messages to Clients,
PLUS a regular small 'heartbeat' message
Client - Listens for DataSource messages and the 'heartbeat'.
If the heartbeat isn't received X seconds after the last one,
we know the DataSource has died and can take action.
Nova situação:
DataSource - pushes occasional messages to intermediate clients,
Load Balanced MicroService(1) - listens for datasource mesages
and pushes messages to next in chain
Load Balanced MicroService(n) - listens for MicroService(n-1)
and pushes messages to next in chain
Client - Listens for MicroService(last) messages, but the
heartbeat is lost in the ether
Solução:
Os MicroServices devem se comportar como o cliente antigo e relatar quando sua fonte de dados falhou em seus ouvintes.
Mas enquanto as mensagens serão processadas por um único microsserviço em um grupo com balanceamento de carga, o batimento cardíaco deve ser processado por todos eles. Portanto, a pulsação deve usar o roteamento de fanout enquanto a mensagem deve usar uma fila de trabalho .
No entanto, é difícil continuar esse padrão ao longo da cadeia, pois cada processo de trabalho publica sua própria pulsação.
Eu sugeriria uma forma mais avançada de roteamento em que você tem um serviço de roteamento que esconde os trabalhadores do resto do mundo
Aqui, o trabalhador do seu roteador escuta as filas de entrada e distribui as tarefas para um grupo de trabalhadores. Ele recebe o trabalho concluído e o passa adiante. Escondendo os trabalhadores individuais. Ele pode lidar com trabalhadores que morrem ou demoram muito para completar o trabalho, incendiar novos trabalhadores quando estão sob carga, etc.
No seu caso, ele também pode lidar com o batimento cardíaco. garantir que o batimento cardíaco a jusante seja representativo das mensagens que está enviando.