Estamos utilizando algún tipo de enfoque de microservicios en nuestra aplicación (aunque en realidad no se cumple).
Cuando un servicio está inactivo o lanzando una excepción, el enfoque es ponerlo en una cola (ActiveMQ) y volver a intentarlo cuando el servicio vuelva a estar activo.
¿Es esta una solución "estándar"? ¿O debería evitarse por alguna razón?
¿O hay una solución mejor o alternativa a este problema?
microservices
message-queue
usuario140547
fuente
fuente
Respuestas:
Suponiendo que puede hacer que sus llamadas sean asíncronas (no necesita obtener una respuesta del servicio para continuar), hacerlo es a menudo una buena idea.
Permite que el servicio de llamadas continúe funcionando sin la demora (o error absoluto) causado al llamar al otro servicio. Le permite tener una lógica de reintento más compleja y distribuir la carga de manera más uniforme con el tiempo.
En muchos casos, puede aprovecharlo aún más renunciando a las garantías de pedido proporcionadas por las colas y cambiando a Kafka u otro agente de mensajes asíncrono. Hermes proporciona una API REST más conveniente además de Kafka.
fuente
Este es un mal enfoque en mi opinión. deberías
Siempre comunique ver una cola: su aplicación no debe esperar una respuesta inmediata y, por lo tanto, el proceso de trabajo no tiene que estar 100% disponible
Utilice siempre las comunicaciones de estilo RPC. Solicitudes de equilibrio de carga en varias instancias de servicio: si un servicio es defectuoso, otro responderá a la solicitud, por lo que tiene un tiempo de actividad del 100%
Tener el flujo, llamar al servicio, obtener un error, colocarlo en la cola, recuerde verificar en la cola las respuestas a algunos de mis mensajes pero no a todos. Es demasiado complicado.
editar: demasiado complicado porque tienes que programar tanto el estilo de comunicación sincronizado como el asíncrono en lugar de solo uno u otro.
fuente