Beispiel für die Integration Akka mit bestehendem Java-Projekt
Wenn ich bereits vorhandene java
web-Anwendung, die spring
und servlet
container. Was ist die richtige Art und Weise zu integrieren, Akka?
Wie ich ' G gehen zu müssen Actor1
und Actor2
, die miteinander kommunizieren. Was wäre der Einstiegspunkt zu starten, verwenden die Akteure? (wie z.B.: 1. legen Sie es 2. change config 3. Verweis auf Schauspieler)
Fand ich http://doc.akka.io/docs/akka/2.2-M3/general/configuration.html Aber seine nicht, geben Sie mir einen Kleber. Will einfach nur, um echtes Beispiel für integration.
Gibt es einige einfache integration Beispiel?
EDIT:
Die Anwendung hat einige Suche, bekommen einige Daten von außerhalb, die Speicherung von info-Dateien.
Die Anwendung ist Recht groß. Einige Komponenten/Objekt, können Sie Ihr eigenes Leben, das ist aus der direkten client-Anfragen, es können einige Dinge tun, ist parallel. Wie einige singleton-Objekte, veränderlichen Zustand.
Die Sache ist ich weiß nicht genau, wo ich mich bewerben kann Schauspielern, ich bin Untersuchung. Was ich aber habe schon viel von synchronized-Blöcken hier und da.
Und es ist schon, glaube ich, eine Art Zeichen, dass die Akteure angewandt werden können. (da bin ich nicht sicher, vielleicht ich vergessen habe, einige synchronisiert, und natürlich gibt es keine integration tests)
Zur Konfiguration, ich bin nur nicht sicher, soll ich die Konfiguration der Anwendung.conf für lassen Actrors/Akka dort Leben (da die Dokumentation selbst beschreibt es).
Was sehe ich:
@Component("someManager")
public class SomeManager {
List<Some> something; //mutable state, that why I use locks here.
//methods: add(), delete(), update()
}
Ich könnte es SomeManagerActor
SomeManager
aus controller
. Also, es wäre schön, controller Schauspieler ? Ich will es, um feedback zu erhalten in (onReceive
() - Methode).
Dies ist eine Art der strittigen... Das ist ein Grund mehr, warum ich brauche etwas Beispiel.
Ich glaube, ich kann der Anwendung verbessern, indem Sie loszuwerden, alle synchronized/whait/notify
Zeug, verschieben von Aufgaben an Akteure, die Verwendung von Nachrichten als eine Möglichkeit der Kommunikation mit/zwischen Ihnen.
Oder wie diese es könnte sein, das Schauspieler zu schreiben, um die Eigenschaft Dateien:
EDIT:
Zum Beispiel, für was ich jetzt gefunden: Actor1 Nachricht senden an Actor2 verwende ich einen trick:
//somewhere in existing code
public void initActors() {
ActorSystem system = ActorSystem.create(example");
//initializing
final ActorRef actor1 = system.actorOf(Props.create(Actor1.class), "actor1");
}
Actor1 hat eine Methode preStart()
gestartet wird, sobald ich entsprechende Referenz (oben). Und es sendet die Nachricht an Actor2:
@Override
public void preStart() {
Aber ich bin mir nicht sicher, dass es gut ist, warum initialisiert werden zwei Schauspieler, die Ihre
Arbeit.
InformationsquelleAutor der Frage ses | 2013-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantwortung meiner eigenen Frage. Nur um meine Gedanken zu teilen, was ich kam mit.
Wenn wir die bereits bestehenden Web-Applikation auf Basis von Servlets/Spring MVC, es scheint, dass oft es gibt keinen guten Grund, den Wechsel zu
Actors
/AKKA
(oder der Einführung der Akteure im bestehenden system nur für hack) wenn in unserer Anwendung haben wir:(Parallelität).
ruft der andere, wo die Anrufe sind angewiesen auf einander: Wie
Controller-Aufruf Komponente Komponente speichern Sie einige Daten in einer Liste
(die änderbar, aber synchronisiert Synchronisiert-Liste ).
, Was falsch ist mit Akteuren, die in diesem einfachen system:
Dass Tonnen von Nachrichten (Klassen, wrap-Befehle an/von Akteuren), die durch die Komponenten statt Allgemeine Methoden (mit Vorteile von OPP, Implementierung von Schnittstellen, die mehrere Implementierungen - aber die Akteure in der Regel
final class
).Dass Nachrichten als
string
, keine gute Lösung - da ist es schwer zu Debuggen.In so einem system (wie mvc site), meist sind es nicht so viele Dinge zu synchronisieren (es ist schon ziemlich
stateless
). Es gibt in der Regel 0..2mutable shared data
in jedem Controller/Komponente. Die ist nicht so schwer zu synchronisieren (nur zur Gewohnheit machen, zu setzen, synchronisieren, alles, das gemeinsame in den oberen Klassen (so, dass die Staaten erkennbar/lokalisiert). Manchmal müssen Sie nursynchronized collection
oder verwenden Sie javaAtomic
wrapper-Typ., Wenn die Akteure, die verwendet werden könnten, obwohl für die bestehende Anwendung. Anwendungsfälle könnten sein:
MasterActor
->SiteSearchActor
(wie es beschrieben wurde für die BerechnungPI
hier). Die MasterActor hat das endgültige Ergebnis. Wo SiteSearchActor berechnet (suchen über mehrere Seiten) für mehrere Kunden.scalability
undperformance
(Aber im Allgemeinen Stimme ich mit diese Artikel über
concurrency
undparallelism
. Wenn ich chance habe, um eine Anwendung von Grund auf, würde ich Akka ohne Servlets container und Pflege irgendwie über Nachrichten (command-Klassen) und OOP, wenn es verwendet werden muss (es gibt nicht so vieleOOP
im Allgemeinen web-Anwendungen. Ich sollte sowieso sagen. Aber niemand verhindern, halten Sie einige business-Logik inOOP
Weg, Schauspieler einfach eine Mitteilung-Kleber). Das ist viel besser/einfacher als die Verwendung von JMS zum Beispiel.Aber wie ich schon sagte:
Schauspieler /Akka ist gut für:
Die einzige Frage die ich jetzt haben, ist
performance comparison
. Angenommen, wir wissen, dass:Wenn wir das gleiche Szenario für AKKA/Servlets mit N (Akteure, wobei N viel mehr weniger als 1000), die wir wahrscheinlich würde haben eine viel bessere Leistung (da niemand blockiert niemanden, außer die queue selbst, keine Notwendigkeit für den Wechsel von einem thread zu einem anderen).
Aber selbst wenn ein system mit 10000 clients für Servlet-basierte (thread-Modell) Anwendung, mit 100 client-es könnte sehr gut funktionieren. Und Wenn wir über pool-Verbindung (in der Tat haben wir) es macht die gleiche Arbeit wie Schauspieler Warteschlange (Posteingang), scheduling-client für den Zugriff auf einige Stück service. Es könnte Verbesserung unserer Leistung in K-mal (wo K ist viel mehr, dass wenn wir nicht über pool - Vermietung Threads gegenseitig blockieren verzweifelt).
Die Frage ist:
Ist es ein guter Grund nicht für AKKA für bestehende servlet-basierten Anwendung?
Macht es Sinn, so zu denken?
Selbst wenn Servlets Modell ist schlecht (mit befassen sich mit Schlösser in die übrigen(aktiven) thread, erstellen von Verbindung kommt aus dem Verbindungs-pool).
Könnte es sein, gut genug mit dem connection-pool, der vergessen wird beim Vergleich von akka, servlets basiert Zeug. Wir noch optimieren können unsere Anwendung, änderung MAX-VERBINDUNG im Verbindungspool. Und normalerweise, wir tun alle unser bestes, um die Anwendung zustandslos, also, in den meisten Fällen können wir nicht alles synchronisieren.
Aber natürlich ist es schlecht, dass nur Eine connection pool Ganze Anwendung. Wenn im Vergleich zu Akteuren jeder Akteur jeweils eigenen Verbindungs-pool (Postfach), und jeder Schauspieler könnte verantwortlich sein für die Annahme von HTTP-request. Das Modell sicherlich besser.
P. S.
In den meisten Fällen **Zukunft**s sind gut genug. Die Schauspieler sind gut, wenn Sie wollen "Sicherheit" speichern den Zustand in es (das unterscheidet Sie sich von der Zukunft im Grunde).
UPDATE:
Manche Menschen glauben, dass es eine schlechte Idee, bei der alle Schauspieler. Was gut ist - rein funktionalen Ansatz oder etwas, das scalaz bereits bietet (sowie
Haskell
vermute ich mal) - aber nicht für remote-Aufrufe noch.InformationsquelleAutor der Antwort ses
Ich habe ein ähnliches problem.
Ich bin damit einverstanden, dass es wenig Vorteil, hinzufügen von AKKA, um einfache web-appliaciton mit einer kleinen Anzahl von Benutzern.
Aber ich glaube nicht, dass es schwierig ist, zu befestigen AKKA zu bestehenden spring mvc-app. Bei Ihrem Projekt muss skalieren Sie können wickeln Sie Ihre @Service Ebene Akteure.
Daher @Controller müssen nicht drin sein Akteuren.
Hier ist ein Vortrag über die Zusammenlegung der Frühling mit akka:
https://www.youtube.com/watch?v=fALUf9BmqYE
Quellcode für die Präsentation:
https://github.com/jsuereth/spring-akka-sample/tree/master/src/main/java/org/springframework/samples/travel
InformationsquelleAutor der Antwort Kaspars Rinkevics