In meiner Play2-Anwendung versuche ich, Akka Future zu nutzen und Versprechungen zu machen

8

Beim Lesen der play2-Dokumentation habe ich folgendes gefunden:

  

Wegen der Funktionsweise von Play 2.0 muss der Aktionscode so schnell sein wie   möglich (d. h. nicht blockierend). Also, was sollten wir als Ergebnis zurückgeben, wenn wir   können sie noch nicht berechnen? Die Antwort sollte ein Versprechen von a sein   Ergebnis!

Wow! Das hat mich natürlich an playakka und akka . Ich entwickle gerade eine Autocomplete-Anwendung, die in elasticsearch integriert ist, also wäre das eine perfekte Passform!

Controller:

%Vor%

Service:

%Vor%

Suchwort:

%Vor%

Der Code funktioniert sehr gut, aber ich muss sagen, dass ich nicht sicher bin, ob ich das richtig umgesetzt habe. Ich habe wirklich Mühe, die Dokumentation zu verstehen. Meine Fragen sind im Grunde:

  1. Habe ich Future und Promise korrekt implementiert?
  2. Wäre es besser, einen benutzerdefinierten Akteur zu erstellen und den Index in diesem Akteur auszuführen Suche, wie im Beispiel in der Dokumentation:

=====

%Vor%
  1. Vielleicht hast du ein großartiges Beispiel, das ich noch nicht gefunden habe?
jakob 03.01.2013, 10:01
quelle

2 Antworten

2

AFAIK, dein Code ist völlig in Ordnung.

Ich könnte mich irren, aber ich denke, dass die zweite Option genau der ersten entspricht, da die Methode Akka.future() ein Wrapper um die Methode Akka.promise() ist.

Aus der Akka Klassenquellcode von Play 2.0.4 :

%Vor%     
nico_ekito 03.01.2013, 10:17
quelle
0

Obwohl Sie das Versprechen und die Zukunft korrekt implementiert haben, würde ich diesen Code nicht als "nicht blockierend" betrachten ...

Es scheint, dass der blockierende Anruf

ist %Vor%

und obwohl dies jetzt in ein Versprechen / Zukunft verpackt ist, ist es immer noch ein Blockieranruf ... Wenn Sie wirklich blockierungsfrei sein wollen (mit all seinen Vorteilen), müssen Sie Ihren Datenzugriff (Abfragen) nicht blockierend machen ...

Oh, und eine nicht blockierende Aktionsmethode sollte ein Versprechen eines Ergebnisses und kein Ergebnis zurückgeben ...

So sollte ich deinen Code schreiben:

%Vor%

Hoffe, das hilft!

    
stikkos 08.01.2014 18:04
quelle