/ / Manejar los problemas de latencia cuando dos puntos finales REST leen los mismos datos: java, mongodb, rest, spring-mvc, spring-boot

Manejar los problemas de latencia cuando dos puntos finales REST leen los mismos datos: java, mongodb, rest, spring-mvc, spring-boot

Tengo dos api de descanso. Utilizo Spring Boot y MongoDB.

En primer lugar, el cliente invoca el api1 que inserta un registro en una colección de mongo. Luego, después de unos segundos, el api2 intenta leer el registro de inserción y hacer algún proceso.

Pero hay situaciones en las que el api2, intenta leer el registro, no se insertó en la colección debido a la latencia del api1.

En ese caso, el api2, no es capaz de hacer el proceso.

Se me ocurre una opción, cuando el api2 lee el registro, y si todavía no está insertado en el mongo, duerma el thead durante unos segundos y vuelva a activarlo (puede hacer un poco de tiempo hasta que exista el registro)

¿Qué otras opciones tengo?

Actualizar: Las dos API son independientes. El flujo es como cuando, al finalizar, se carga un video al que llama api1 e inserta un medio con un reflejo y ese flujo finaliza. Luego, la aplicación recibe una devolución de llamada de un sistema de procesamiento de video externo a api2, luego de que se completa la transcodificación del video (generalmente después de 30s aproximadamente) con el refid, que api2 luego realiza algunas actualizaciones en los medios insertados. Hay un caso de vanguardia, para videos de muy pequeño tamaño, el sistema de video externo actúa con rapidez y devuelve la llamada donde, en ese momento, mi aplicación aún inserta los medios en el dispositivo.

Respuestas

1 para la respuesta № 1

Sugeriría que su api1 una vez que esté hechoinvoca api2 y le pasa el id que insertó. De esta manera, api2 nunca tendría que ejecutarse prematuramente. La otra forma es usar una cola donde api1 colocará un mensaje y api2 consumirá el mensaje y lo procesará (crédito para el usuario @warge que lo mencionó en su comentario)


0 para la respuesta № 2

De tu caso de uso no tienes tantas opciones.

La forma más limpia de hacerlo es crear el documento en el momento de la carga, de modo que api1 y api2 se actualicen al respecto, y no habrá ninguna excepción "no encontrada".