Jak rozpocząć pracę z Akka.Net

Akka.Net to platforma do przetwarzania rozproszonego typu open source, zbudowana przez Petabridge. Akka.Net umożliwia tworzenie skalowalnych, odpornych, współbieżnych aplikacji sterowanych zdarzeniami przy użyciu modelu aktora. W tym artykule przedstawię ważne pojęcia stojące za Akka.Net, omówię, dlaczego jest przydatny i pomogę Ci rozpocząć pracę z Akka.Net w C #.

Model aktora to paradygmat programowania oparty na asynchronicznej architekturze opartej na komunikatach. W tym paradygmacie podstawową jednostką wykonania jest aktor. Ten paradygmat programowania jest odpowiedni do tworzenia dużych, złożonych, rozproszonych aplikacji, które są wysoce niezawodne, ale mogą mieć nieprzewidywalne stopnie opóźnienia.

Podejście programowania zorientowanego obiektowo wykorzystuje klasy i obiekty do modelowania domeny problemowej. Pracując w Akka.Net, modelujesz swój problem za pomocą aktorów i komunikatów. W Akka.Net aktor to obiekt o określonym zachowaniu. Chociaż aktorzy mają stan wewnętrzny, nie mają żadnego wspólnego, zmiennego stanu. Możesz mieć wielu współbieżnych aktorów w swojej aplikacji, a każdy z nich samodzielnie przetwarza operacje. Aktorzy identyfikowani są poprzez adresy. Pochodzą one z klasy ActorBase iz kolei mogą tworzyć aktorów podrzędnych.

Aktorzy komunikują się ze sobą, przekazując komunikaty asynchronicznie. Zasadniczo aktor otrzymuje wiadomość, a następnie reaguje na nią przetwarzając ją lub przekazując kolejną wiadomość innemu aktorowi, aby wykonać zadanie. Zauważ, że wiadomości w Akka.Net są przetwarzane sekwencyjnie, jedna po drugiej, w kolejności, w jakiej przychodzą. Ponieważ aktorzy mogą działać lokalnie lub na serwerze zdalnym, potrzebny jest wspólny format wymiany komunikatów. Komunikaty Akka.Net są niezmienne. Mogą to być wystąpienia ciągu, liczby całkowitej lub nawet klasy niestandardowej.

Spójrzmy, jak możemy zbudować prostą klasę aktorów i pracować z wiadomościami. Po pierwsze, należy zainstalować Akka.Net z NuGet. Możesz to zrobić, wpisując następujące polecenie w wierszu polecenia NuGet.

Install-Package Akka

Alternatywnie możesz zainstalować Akka.Net przy użyciu okna Menedżera pakietów NuGet z poziomu środowiska IDE programu Visual Studio.

Zwróć uwagę, że niestandardowe klasy aktorów w Akka.Net powinny pochodzić z UntypedActorklasy, która rozszerza ActorBaseklasę struktury Akka.Net. Oto, jak powinna wyglądać struktura niestandardowej klasy aktora w Akka.Net.

public class ThisIsACustomActor: UntypedActor

    {

        protected override void PreStart ()

        {

            // Tutaj możesz wpisać dowolny kod inicjujący

        }

        protected override void PreRestart (powód wyjątku, komunikat obiektu)

        {

        }

        protected override void OnReceive (komunikat o obiekcie)

        {         

           // Ta metoda jest używana do obsługi wiadomości

        }

        protected override void PostStop ()

        {

            // Tutaj możesz napisać kod porządkujący.

            // Ta metoda jest wywoływana, gdy aktor zatrzymał się i nie otrzymuje już wiadomości

        }

        protected override void PostRestart (powód wyjątku)

        {

        }

    }

Nie musisz zastępować wszystkich tych metod. Ze względu na prostotę zastąpimy tylko OnReceivemetodę tworzenia niestandardowej klasy aktora z minimalną funkcjonalnością. Poniższy fragment kodu tworzy niestandardową klasę aktora o nazwie BasicActor.

public class BasicActor: UntypedActor

    {

        protected override void OnReceive (komunikat o obiekcie)

        {

            if (wiadomość jest ciągiem znaków)

            {

                var msg = wiadomość jako łańcuch;

                Console.WriteLine (msg);

            }

        }

    }

Aby stworzyć instancję aktora, powinieneś skorzystać z tej Akka.Actor.ActorSystemklasy. ActorSystemMoże być określony jako zbiór hierarchicznej podmiotów, które mają identyczną konfigurację. Poniższy fragment kodu pokazuje, jak można utworzyć instancję naszej BasicActorklasy, a następnie przekazać do niej komunikaty.

static void Main (string [] args)

        {

            var actorSystem = ActorSystem.Create („ActorSystem”);

            var basicActor = actorSystem.ActorOf ();

            basicActor.Tell („Witaj świecie!”);

            Console.ReadLine ();

        }

Należy tutaj zauważyć, że kiedy wysyłasz wiadomość do aktora, jest ona dostarczana do skrzynki pocztowej, która jest sortowana w kolejności FIFO (pierwsze przyszło, pierwsze wyszło). Skrzynka pocztowa przekazuje wiadomość do OnReceivemetody tylko wtedy, gdy aktor jest dostępny do jej przetworzenia.

Oto pełna lista kodów w celach informacyjnych.

using Akka.Actor;

using System;

przestrzeń nazw AkkaDemo

{

    Program zajęć

    {

        static void Main (string [] args)

        {

            var actorSystem = ActorSystem.Create („ActorSystem”);

            var basicActor = actorSystem.ActorOf ();

            basicActor.Tell („Witaj świecie!”);

            Console.ReadLine ();

        }

    }

    public class BasicActor: UntypedActor

    {

       protected override void OnReceive (komunikat o obiekcie)

        {

            if (wiadomość jest ciągiem znaków)

            {

                var msg = wiadomość jako łańcuch;

                Console.WriteLine (msg);

            }

        }

    }

}

Po uruchomieniu powyższego programu pojawia się komunikat „Hello World!” zostanie wyświetlony w oknie konsoli.

Akka.Net to doskonały wybór, gdy potrzebujesz współbieżności i obliczeń rozproszonych, ponieważ umożliwia pracę z abstrakcjami wysokiego poziomu zamiast wątków i współprogramów. Jest odporny na uszkodzenia i obsługuje adaptacyjne równoważenie obciążenia, partycjonowanie, routing i zdalne zarządzanie oparte na konfiguracji.

Będę ponownie odwiedzać Akka.Net w przyszłych postach tutaj. Do tego czasu możesz dowiedzieć się więcej o Akka.Net i modelu aktora, przeglądając zawartość dostępną na bootcampie Petabridge Akka.Net.