/ / Beheben von Latenzproblemen, wenn zwei REST-Endpunkte dieselben Daten lesen - Java, Mongodb, Rest, Spring-MVC, Spring-Boot

Behandeln Sie Latenzprobleme, wenn zwei REST-Endpunkte dieselben Daten lesen - Java, Mongodb, Rest, Spring-Mvc, Spring-Boot

Ich habe zwei Rest-APIs. Ich benutze Spring Boot und MongoDB.

Zuerst ruft der Client die API1 auf, die einen Datensatz in eine Mongo-Sammlung einfügt. Nach einigen Sekunden versucht die API2, den Insert-Datensatz zu lesen und einige Vorgänge auszuführen.

Aber es gibt Situationen, in denen die api2 versucht, den Datensatz zu lesen. Er wurde aufgrund der Latenz von api1 nicht in die Sammlung eingefügt.

In diesem Fall kann der api2 den Vorgang nicht ausführen.

Eine Option, die mir in den Sinn kommt, ist, wenn die API2 die Aufzeichnung liest und wenn sie immer noch nicht in den Mongo eingelegt ist, den Thead für einige Sekunden schlafen und ihn aufwecken (es kann einige Zeit dauern, bis die Aufzeichnung existiert).

Welche anderen Optionen habe ich?

Aktualisieren: Die beiden APIs sind unabhängig. Der Ablauf ist so, als würde nach dem Hochladen eines Videos api1 aufgerufen und ein Medium mit einer Refid eingefügt, das den Ablauf beendet. Anschließend erhält die Anwendung einen Rückruf von einem externen Videoverarbeitungssystem an api2, nachdem die Videotranscodierung (normalerweise nach etwa 30 Sekunden) mit dem refid abgeschlossen wurde. Api2 führt dann einige Aktualisierungen für das eingelegte Medium durch. Es gibt einen Randfall, bei sehr kleinen Videos agiert das externe Videosystem schnell und gibt den Rückruf, bei dem zu diesem Zeitpunkt meine Anwendung noch das Medium in den Mongo einlegt

Antworten:

1 für die Antwort № 1

Ich würde vorschlagen, dass Ihre API1 sobald es fertig istruft api2 auf und übergibt ihm die eingegebene ID. Auf diese Weise müsste api2 niemals vorzeitig ausgeführt werden. Die andere Möglichkeit besteht darin, eine Warteschlange zu verwenden, in der api1 eine Nachricht platziert und api2 die Nachricht verarbeitet (Gutschrift an @warge-Benutzer, der sie in seinem Kommentar erwähnt hat).


0 für die Antwort № 2

Von Ihrem Verwendungszweck haben Sie nicht so viel Auswahl.

Die saubere Möglichkeit besteht darin, das Dokument beim Hochladen zu erstellen, sodass die API1 und API2 auf diese Weise aktualisiert werden und es keine Ausnahme "Nicht gefunden" gibt.