Estamos usando algum tipo de abordagem de microsserviços em nosso aplicativo (embora não seja realmente respeitado).
Quando um serviço está inoperante ou lança uma exceção, a abordagem é colocá-lo em uma fila (ActiveMQ) e tentar novamente quando o serviço estiver ativo novamente.
Esta é uma solução "padrão"? Ou deveria ser evitado por algum motivo?
Ou existe uma solução melhor ou alternativa para esse problema?
microservices
message-queue
user140547
fonte
fonte
Respostas:
Supondo que você possa fazer suas chamadas assíncronas (não é necessário obter uma resposta do serviço para prosseguir), isso geralmente é uma boa idéia.
Ele permite que o serviço de chamada continue trabalhando sem o atraso (ou erro total) causado pela chamada do outro serviço. Ele permite que você tenha uma lógica de repetição mais complexa e espalhe a carga de maneira mais uniforme ao longo do tempo.
Em muitos casos, você pode obter ainda mais benefícios desistindo das garantias de pedidos fornecidas pelas filas e alternando para o Kafka ou outro intermediário de mensagens assíncronas. Hermes fornece uma API REST mais conveniente sobre Kafka.
fonte
Esta é uma péssima abordagem na minha opinião. você deveria
Sempre se comunique com uma fila: seu aplicativo não deve esperar uma resposta imediata e, portanto, o processo de trabalho não precisa estar 100% disponível
Sempre use comunicações no estilo RPC. Solicitações de balanceamento de carga em várias instâncias de serviço: se um serviço estiver com defeito, outro responderá à solicitação, para que você tenha 100% de tempo de atividade
Tendo o fluxo, ligue para o serviço, obtenha um erro, coloque na fila, lembre-se de verificar a fila em busca de respostas para algumas das minhas mensagens, mas não para todas elas. acabou mais complicado.
editar: mais complicado, pois você precisa programar o estilo de comunicação sincronizado e assíncrono, em vez de apenas um ou outro.
fonte