Um termin bitten Muster

Posted on

Dies ist eine Variation des über4.zweckgebundenen Antwortaggregatormusters. Dies ist ähnlich wie oben Pro Sitzung untergeordneten Actor-Muster. Manchmal wiederholen Sie möglicherweise die gleiche Art und Weise, Antworten zu aggregieren, und möchten dies einem wiederverwendbaren Akteur extrahieren. Nützlich, wenn Sie auf die Kündigung warten oder die geordnete Kündigung mehrerer Akteure verfassen müssen. Das Hauptziel des Ask-Musters in Akka besteht darin, die Anforderung mit einer Zeitbeschränkung zu binden. Es gibt Fälle, in denen Sie auf jeden Fall Futures komponieren und die Rückruffunktionen verwenden möchten. Stellen Sie in jedem Fall sicher, dass Sie den Akteursstatus nicht ändern oder den Akteurstatus schließen. Alternativ bietet das Fragenmuster eine Möglichkeit, eine Nachricht an einen Akteur zu senden und eine Antwort von diesem zu erhalten. Das Ergebnis der Anfrage wird eine Zukunft sein, die eine mögliche Antwort darstellt. Wenn Sie einen Webdienst ähnlich unserem erstellen, der das Aggregieren von Daten aus verschiedenen Quellen umfasst, sollten Sie das Actor-Pro-Request-Modell verwenden, um das Muster “tell, don`t ask” heraufzustufen. Es gibt viele Variationen dieses Musters, und das ist der Grund, warum dies als Dokumentationsbeispiel und nicht als eingebautes Verhalten in Akka bereitgestellt wird. Es soll an Ihre spezifischen Bedürfnisse angepasst werden.

Wir empfehlen Ihnen, das Tell-Muster zu verwenden, wann immer Sie können, und nur zu fragen, wenn dies erforderlich ist. Wenn Sie sich mit Fragen Muster viel finden Sie sich kämpfen, um alle Timeouts zu verwalten. Ich könnte wählen, dies mit einem begrenzten Pool von Akteuren durch den Router in zwei Zuständen verwaltet implementieren (arbeiten und verfügbar). Dies könnte sowohl eine Größenbeschränkung geben als auch gc vermeiden. Übrigens, ein Pool von Schauspielern, deren Verantwortung ist es, als vorübergehend engagierter Diener für die Schließung über die Arbeit für eine Partei zu handeln, aber die von einer dritten verwaltet werden, könnte angemessen als “Porter-Muster. hallo, sehr interessante Post! Ich bin ein Anfänger zu akka, aber für mein Projekt kommt es natürlich heraus, dieses Muster auch zu verwenden. Eine Frage… Wie ist das Detail der Kommunikation zwischen dem Routing und dem Pro-Request-Akteur? In vielen Fällen wird die vorherige Lösung nicht ausreichen. Akka hat Standorttransparenz und keine garantierte Lieferung (was eine weitere Diskussion für sich ist). Wenn Sie die GetTime-Nachricht verlieren, wird ein Client, der unendlich wartet, verloren.

Das ist etwas, was Sie verhindern möchten. In anderen Fällen möchten Sie ein Timeout festlegen, damit die Verarbeitung fortgesetzt werden kann, oder Sie können dem Benutzer rechtzeitig antworten. Dies sind alles Situationen, die mithilfe des Ask-Musters mit einem Timeout implementiert werden können: Das normale Muster für das Erwarten einer Antwort besteht darin, eine ActorRefActorRef in die Nachricht aufzunehmen, in der Regel einen Nachrichtenadapter. Dies kann für einen sharded Akteur verwendet werden, aber wenn ctx.selfctx.getSelf() gesendet wird und der Shard-Akteur verschoben oder passiviert wird, dann wird die Antwort an tote Briefe gesendet. das? kehrt dann Zukunft zurück, die erfolgreich abgeschlossen wird (und das Date-Objekt enthält), wenn die Antwort rechtzeitig kommt. Wenn ein Timeout auftritt, wird die Zukunft mit einer Ausnahme abgeschlossen, nämlich akka.pattern.AskTimeoutException. Nachrichtenaustausch mit Schauspielern folgen ein paar gängigen Mustern, lassen Sie uns durch jedes einzelne von ihnen gehen. Aber ich frage mich, warum dieses Beispiel kein Fragemuster verwendet hat? Was ist falsch daran, hier das Fragemuster zu verwenden? Schauspieler pro Anfrage klingt wie eine ziemlich solide Möglichkeit, Affen mit Futures zu vermeiden, ein großes Plus für Java-Shops, die sich in diesen Raum wagen. Ich drängt unsere Ingenieure, Ask Pattern/akka Futures ausschließlich in Nicht-Akteur-Code zu verwenden, der mit Schauspielern interagiert (z. B. JMS-Listener-Threads und Service-Wrapper).

Unser erstes Design wurde verwendet, um die Lücke zwischen unserer Routing-Schicht und den Actors im Anwendungskern zu überbrücken.