Erste Schritte mit Akka.Net

Akka.Net ist ein Open Source-Framework für verteiltes Computing, das von Petabridge entwickelt wurde. Mit Akka.Net können Sie mithilfe des Akteurmodells skalierbare, ausfallsichere, gleichzeitige und ereignisgesteuerte Anwendungen erstellen. In diesem Artikel werde ich die wichtigen Konzepte hinter Akka.Net vorstellen, erläutern, warum dies nützlich ist, und Ihnen helfen, mit Akka.Net in C # zu arbeiten.

Das Akteurmodell ist ein Programmierparadigma, das auf einer asynchronen, nachrichtengesteuerten Architektur basiert. In diesem Paradigma ist die grundlegende Ausführungseinheit ein Akteur. Dieses Programmierparadigma eignet sich zum Erstellen großer, komplexer, verteilter Anwendungen, die sehr zuverlässig sind, jedoch möglicherweise unvorhersehbare Latenzgrade aufweisen.

Der objektorientierte Programmieransatz verwendet Klassen und Objekte, um die Problemdomäne zu modellieren. Wenn Sie in Akka.Net arbeiten, verwenden Sie Akteure und Nachrichten, um Ihr Problem zu modellieren. In Akka.Net ist ein Schauspieler ein Objekt mit einem bestimmten Verhalten. Während Akteure einen internen Zustand haben, haben sie keinen gemeinsamen veränderlichen Zustand. Sie können viele gleichzeitige Akteure in Ihrer Anwendung haben, wobei jeder von ihnen Vorgänge unabhängig voneinander verarbeitet. Akteure werden durch Adressen identifiziert. Sie stammen aus der ActorBase-Klasse und können wiederum untergeordnete Schauspieler erstellen.

Akteure kommunizieren miteinander, indem sie Nachrichten asynchron weitergeben. Im Wesentlichen empfängt ein Akteur eine Nachricht und reagiert darauf, indem er sie entweder verarbeitet oder eine andere Nachricht an einen anderen Akteur weiterleitet, um die Aufgabe zu erledigen. Beachten Sie, dass die Nachrichten in Akka.Net nacheinander in der Reihenfolge verarbeitet werden, in der sie ankommen. Da Akteure lokal oder auf einem Remote-Server ausgeführt werden können, ist ein gemeinsames Nachrichtenaustauschformat erforderlich. Akka.Net-Nachrichten sind unveränderlich. Dies können Instanzen einer Zeichenfolge, einer Ganzzahl oder sogar einer benutzerdefinierten Klasse sein.

Schauen wir uns an, wie wir eine einfache Schauspielerklasse erstellen und mit Nachrichten arbeiten können. Zunächst sollten Sie Akka.Net von NuGet installieren. Sie können dies tun, indem Sie den folgenden Befehl an der NuGet-Eingabeaufforderung eingeben.

Install-Package Akka

Alternativ können Sie Akka.Net mithilfe des NuGet-Paketmanagerfensters in der Visual Studio-IDE installieren.

Beachten Sie, dass benutzerdefinierte Akteursklassen in Akka.Net von der UntypedActorKlasse abgeleitet sein sollten , die die ActorBaseKlasse des Akka.Net-Frameworks erweitert. So sollte die Struktur einer benutzerdefinierten Schauspielerklasse in Akka.Net aussehen.

öffentliche Klasse ThisIsACustomActor: UntypedActor

    {

        geschützte Überschreibung void PreStart ()

        {

            // Hier können Sie einen beliebigen Initialisierungscode schreiben

        }}

        protected override void PreRestart (Ausnahmegrund, Objektnachricht)

        {

        }}

        protected override void OnReceive (Objektnachricht)

        {         

           // Diese Methode wird zum Behandeln von Nachrichten verwendet

        }}

        geschützte Überschreibung void PostStop ()

        {

            // Hier können Sie den Bereinigungscode schreiben.

            // Diese Methode wird aufgerufen, wenn der Akteur angehalten hat und keine Nachrichten mehr empfängt

        }}

        protected override void PostRestart (Ausnahmegrund)

        {

        }}

    }}

Sie müssen nicht alle diese Methoden überschreiben. Der Einfachheit halber überschreiben wir nur die OnReceiveMethode zum Erstellen einer benutzerdefinierten Akteurklasse mit minimaler Funktionalität. Das folgende Codefragment erstellt eine benutzerdefinierte Akteursklasse mit dem Namen BasicActor.

öffentliche Klasse BasicActor: UntypedActor

    {

        protected override void OnReceive (Objektnachricht)

        {

            if (Nachricht ist Zeichenfolge)

            {

                var msg = Nachricht als Zeichenfolge;

                Console.WriteLine (msg);

            }}

        }}

    }}

Um eine Instanz eines Schauspielers zu erstellen, sollten Sie die Akka.Actor.ActorSystemKlasse nutzen. Ein ActorSystemkann als hierarchische Sammlung von Akteuren mit identischer Konfiguration definiert werden. Das folgende Codefragment zeigt, wie Sie eine Instanz unserer BasicActorKlasse erstellen und dann Nachrichten an diese übergeben können.

statische Leere Main (string [] args)

        {

            var SchauspielerSystem = ActorSystem.Create ("ActorSystem");

            var basicActor = SchauspielerSystem.ActorOf ();

            basicActor.Tell ("Hallo Welt!");

            Console.ReadLine ();

        }}

Hierbei ist zu beachten, dass beim Senden einer Nachricht an einen Akteur die Nachricht an ein Postfach übermittelt wird, das in FIFO-Reihenfolge (first in, first out) sortiert ist. Das Postfach leitet die Nachricht OnReceivenur dann an die Methode weiter, wenn der Akteur für die Verarbeitung verfügbar ist.

Hier ist die vollständige Codeliste als Referenz.

mit Akka.Actor;

using System;

Namespace AkkaDemo

{

    Klassenprogramm

    {

        statische Leere Main (string [] args)

        {

            var SchauspielerSystem = ActorSystem.Create ("ActorSystem");

            var basicActor = SchauspielerSystem.ActorOf ();

            basicActor.Tell ("Hallo Welt!");

            Console.ReadLine ();

        }}

    }}

    öffentliche Klasse BasicActor: UntypedActor

    {

       protected override void OnReceive (Objektnachricht)

        {

            if (Nachricht ist Zeichenfolge)

            {

                var msg = Nachricht als Zeichenfolge;

                Console.WriteLine (msg);

            }}

        }}

    }}

}}

Wenn Sie das obige Programm ausführen, wird die Meldung "Hallo Welt!" wird im Konsolenfenster angezeigt.

Akka.Net ist eine gute Wahl, wenn Sie Parallelität und verteilte Berechnungen benötigen, da Sie damit anstelle von Threads und Co-Routinen mit Abstraktionen auf hoher Ebene arbeiten können. Es ist vom Design her belastbar und unterstützt adaptiven Lastausgleich, Partitionierung, Routing und konfigurationsbasiertes Remoting.

Ich werde Akka.Net in zukünftigen Beiträgen hier erneut besuchen. Bis dahin können Sie mehr über Akka.Net und das Schauspielermodell erfahren, indem Sie den Inhalt des Akka.Net-Bootcamps von Petabridge erkunden.