Ich arbeite an der Erstellung von API, die potenziell eine hohe Anzahl von Anforderungen pro Sekunde haben könnte, und einige der Anforderungen erfordern möglicherweise eine Menge Berechnung (komplexe Berichte). Ich wurde gebeten, einen kleinen Prototyp als Proof of Concept zusammenzustellen. Ich benutze Spring Boot mit Jersey als meine JAX-RS-Implementierung. In der Vergangenheit habe ich so etwas mit Spring MVC gemacht.Async-API mit Spring + Jersey
Ich versuchte dies mit Jersey und scheint zu arbeiten, oder zumindest hat es keinen Fehler geworfen.
@GET
public DeferredResult<String> getClients() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}
Alle Beispiele, die ich für asynchrone Verarbeitung von Operationen in Jersey gesehen habe, sehen jedoch so aus.
Meine Hauptfrage ist, was ist der Unterschied zwischen diesen drei Code-Schnipsel hinter den Kulissen, wenn es überhaupt welche gibt. Werden diese alle dasselbe erreichen?
Gibt es einen besseren Weg Async zu erreichen? Ich habe auch die Verwendung von Future in Java gesehen, aber nie benutzt.
UPDATE:
Ich habe den folgenden Code in meinem Jersey-Controller, der alle Arbeiten ist.
@GET
public String getClients() {
return "Nothing, I'm Sync!";
}
@GET
@Path("/deferred")
public DeferredResult<String> getClientsAsync() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}
@GET
@Path("/async")
public void getClientsJAXRSAsync(@Suspended AsyncResponse response) {
new Thread(() -> {
response.resume("I am Async too! But I am using @Suspended");
}).start();
}
Das geht zurück auf meine Hauptfrage, was ist der Unterschied zwischen diesen? Mein Verständnis ist DeferredResult ist eine Spring-Sache so nicht sicher, ob es geeignet ist, mit Jersey zu verwenden, obwohl ich Jersey + Spring verwenden.
Dies ist eine meiner geposteten Frage. Schau es dir an .. http://stackoverflow.com/questions/29563475/null-pointer-exception-in-restasy-asynchronous-request HINWEIS: Ich habe immer noch nicht getestet, ob die vorgeschlagene Antwort funktioniert .. –