Category: Uncategorized

Die Interaktion mit einem Schauspieler in Akka erfolgt über eine ActorRef[T]ActorRef wobei T die Art von Nachrichten ist, die der Schauspieler akzeptiert, auch als “Protokoll” bezeichnet. Dadurch wird sichergestellt, dass nur die richtige Art von Nachrichten an einen Akteur gesendet werden kann und dass niemand anderes als der Schauspieler selbst auf die internen Instanzen der Actor-Instanz zugreifen kann. Dieses Beispiel ist ein Aggregator der erwarteten Anzahl von Antworten. Angebotsanfragen werden mit der angegebenen sendRequests-Funktion an die beiden Hotelakteure gesendet, die beide unterschiedliche Protokolle sprechen. Wenn beide erwarteten Antworten gesammelt wurden, werden sie mit der angegebenen AggregatAntwortenfunktion aggregiert und an die Antwort An zurückgesendet. Wenn die Antworten nicht innerhalb des Timeouts eingehen, werden die Antworten bisher aggregiert und an die Antwort To zurückgesendet. Die “Qualität” gibt eine grobe Vorstellung davon, wie gut das Muster funktioniert. Dies ist ein Konglomerat von mehreren Dingen, einschließlich (1) wie gut das Protokoll verstanden wird (2) wie viel das Muster getestet wurde (3) in welchen Verschiedenensituationen das Muster getestet wurde und (4) welcher Bruchteil des identifizierbaren Datenverkehrs richtig identifiziert wird. Weitere Informationen finden Sie in der Musterdatei oder im Wiki-Eintrag des Protokolls. In den letzten zehn Jahren hat sich ein Großteil meines Berufslebens entwickelt, um Anwendungen und (Web-)Server miteinander sprechen zu lassen.

Nachdem ich 2007 mehrere Beiträge zu einem der ersten Client-Seitigen JavaScript-Frameworks geleistet hatte, ließ ich mich von der Idee kleiner, datengesteuerter Web-APIs inspirieren. Drei Jahre später hatte ich die Möglichkeit, ein Projekt zu erforschen und umzusetzen, das es ermöglichte, eine Anwendung über verschiedene Remote Procedure Call (RPC)-Protokolle als meine Abschlussarbeit zur Verfügung zu stellen. Wenn sie etwas schafft, ist es immer wichtig, Struktur zu haben, so dass es einfach sein wird, Dinge später zu finden. Ich bin fest davon überzeugt, dass die Ordnerstruktur ein wichtiger Beitrag zur Softwarearchitektur ist. Um unsere Dateien gut organisiert zu halten, erstellen wir alle unsere Gruppen im Voraus und ich werde notieren, wohin jede Datei gehen sollte. Hier finden Sie eine Übersicht über die Projektstruktur. (Bitte beachten Sie, dass Namen nur Vorschläge sind, Sie können Ihre Klassen und Gruppen benennen, was immer Sie bevorzugen.) Kunden können sich dann die Ereignisse anhören, an denen sie interessiert sind, und ihren Status entsprechend aktualisieren. Dies passt auch gut in die RESTful Service-Layer und Middleware-Muster.

Das Senden dieser Ereignisse kann als eine weitere Middleware implementiert werden, die zuletzt ausgeführt wird und das Endergebnis veröffentlicht. Obwohl HTTP keine Echtzeitaktualisierungen unterstützt, können Clients, die andere Protokolle (z. B. Websockets) verwenden, weiterhin über ihren Protokollhandler über diese Ereignisse benachrichtigt werden. Echtzeit-Updates bedeuten, dass Clients aktiv über Änderungen im System benachrichtigt werden. Es ist nicht Teil der REST-Architektur oder des HTTP-Protokolls, aber es passt fast natürlich in das Konzept der einheitlichen Schnittstelle. Da wir die Nebenwirkungen jeder Methode kennen, können wir automatisch bestimmte Benachrichtigungen senden, sobald sie abgeschlossen sind: Um eine lose Kopplung zu gewährleisten, hat jeder Dienst seine eigene Datenbank. Die Aufrechterhaltung der Datenkonsistenz zwischen Diensten ist eine Herausforderung, da zwei Phasen-Commit/verteilte Transaktionen für viele Anwendungen keine Option sind. Eine Anwendung muss stattdessen das Saga-Muster verwenden. Ein Dienst veröffentlicht ein Ereignis, wenn sich seine Daten ändern. Andere Dienste nutzen dieses Ereignis und aktualisieren ihre Daten.

Es gibt mehrere Möglichkeiten, Daten zuverlässig zu aktualisieren und Ereignisse zu veröffentlichen, einschließlich Event Sourcing und Transaction Log Tailing. Diese Muster wurden als von geringerem allgemeinen Interesse beurteilt als die oben genannten. Representational State Transfer (REST) ist ein Architekturstil, der eine Reihe von Einschränkungen zum Erstellen von Web-APIs definiert. Der Begriff wurde von Roy Fielding in seiner Doktorarbeit geprägt und erweitert viele der Designentscheidungen, die in das HTTP-Protokoll eingingen, in eine Architektur auf hohem Niveau.