2016-07-02 13 views
3

Ich verwende Springboot zum Entwickeln von Diensten in meiner Anwendung.Verfolgen des Status mehrerer asynchroner Anforderungen bei Verwendung von Spring @ Async

Ich habe ein Szenario, in dem - in der Anfrage an das Back-End eingereicht würde etwas Zeit in Anspruch nehmen.

Um zu vermeiden, den Client zu warten, möchte ich die Antwort sofort mit einer Nachricht zurückgeben, die Ihre Anfrage akzeptiert hat. Die Anforderung würde in einem Hintergrundthread ausgeführt.

Ich sehe Spring bietet die @ Async Annotation, die verwendet werden kann, um einen separaten Verarbeitungsthread aus dem Hauptthread zu erstellen und mit der ich die Verarbeitung in einem separaten Thread entladen kann.

Was ich tun möchte ist, wenn ich die erste Antwort als akzeptiert zurückgebe, möchte ich dem Client auch einen Verfolgungsschlüssel/Token zur Verfügung stellen, den der Client später verwenden kann, um den Status der Anfrage zu überprüfen.

Da es mehrere Clients geben kann, die auf den Service zugreifen würden, sollte es möglich sein, die Anfrage jedes Clients eindeutig zu identifizieren.

Ich sehe, es gibt keine solche Funktion in Spring Async oder Zukunft, die eine Tracking-ID als solche zurückgeben kann.

Eine Möglichkeit sehe ich darin, die Zukunft in HttpSession zurückgegeben und später verwenden, um den Status durch den Client zu überprüfen. Aber ich bevorzuge es nicht, HttpSession zu verwenden und möchte, dass meine Dienste zustandslos sind.

Gibt es einen Weg/Ansatz kann ich meine Anforderung erfüllen.

Danke,

BS

Antwort

1

Generieren Sie die Schlüsselvor die Async Methode aufrufen, und es an die Methode übergeben:

String key = generateUniqueKey(); 
callAsyncMethod(key); 
return key; 

Die Async Methode wird das bestehen bleiben müssen Status der Ausführung irgendwo (wir nennen es DataStore). Wenn der Client mit dem Schlüssel nach dem Status fragt, suchen Sie im dataStore nach und geben ihn zurück.