Come iniziare con Akka.Net

Akka.Net è un framework di elaborazione distribuito open source costruito da Petabridge. Akka.Net ti consente di creare applicazioni scalabili, resilienti, simultanee e basate su eventi utilizzando il modello dell'attore. In questo articolo presenterò i concetti importanti alla base di Akka.Net, discuterò perché è utile e ti aiuterò a iniziare a lavorare con Akka.Net in C #.

Il modello attore è un paradigma di programmazione basato su un'architettura asincrona basata sui messaggi. In questo paradigma, l'unità di base dell'esecuzione è un attore. Questo paradigma di programmazione è adatto per la creazione di applicazioni distribuite complesse su larga scala che sono altamente affidabili, ma possono avere gradi di latenza imprevedibili.

L'approccio alla programmazione orientata agli oggetti utilizza classi e oggetti per modellare il dominio del problema. Quando lavori in Akka.Net, usi attori e messaggi per modellare il tuo problema. In Akka.Net, un attore è un oggetto con un comportamento specifico. Sebbene gli attori abbiano uno stato interno, non hanno nessuno stato mutevole condiviso. Puoi avere molti attori simultanei nella tua applicazione con ognuno di loro che elabora le operazioni in modo indipendente e autonomo. Gli attori sono identificati dagli indirizzi. Derivano dalla classe ActorBase ea loro volta possono creare attori figli.

Gli attori comunicano tra loro passando messaggi in modo asincrono. In sostanza, un attore riceve un messaggio e quindi reagisce elaborandolo o passando un altro messaggio a un altro attore per portare a termine il lavoro. Si noti che i messaggi in Akka.Net vengono elaborati in sequenza, uno alla volta, nell'ordine in cui arrivano. Poiché gli attori possono essere eseguiti localmente o su un server remoto, è necessario un formato di scambio di messaggi comune. I messaggi Akka.Net non sono modificabili. Possono essere istanze di una stringa, un numero intero o anche una classe personalizzata.

Diamo un'occhiata a come possiamo costruire una semplice classe attore e lavorare con i messaggi. Prima di tutto, dovresti installare Akka.Net da NuGet. Puoi farlo digitando il seguente comando al prompt dei comandi di NuGet.

Install-Package Akka

In alternativa, puoi installare Akka.Net usando la finestra del gestore di pacchetti NuGet dall'IDE di Visual Studio.

Si noti che le classi di attori personalizzati in Akka.Net dovrebbero derivare dalla UntypedActorclasse, che estende la ActorBaseclasse del framework Akka.Net. Ecco come dovrebbe apparire la struttura di una classe attore personalizzata in Akka.Net.

classe pubblica ThisIsACustomActor: UntypedActor

    {

        override protetto void PreStart ()

        {

            // Puoi scrivere qualsiasi codice di inizializzazione qui

        }

        protected override void PreRestart (motivo eccezione, messaggio oggetto)

        {

        }

        annullamento protetto void OnReceive (messaggio oggetto)

        {         

           // Questo metodo viene utilizzato per gestire i messaggi

        }

        annullamento protetto void PostStop ()

        {

            // Qui è dove puoi scrivere il codice di pulizia.

            // Questo metodo viene chiamato quando l'attore si è fermato e non riceve più messaggi

        }

        protected override void PostRestart (motivo eccezione)

        {

        }

    }

Non è necessario sovrascrivere tutti questi metodi. Per motivi di semplicità, sovrascriveremo solo il OnReceivemetodo per creare una classe attore personalizzata con funzionalità minime. Il frammento di codice seguente crea una classe attore personalizzata denominata BasicActor.

classe pubblica BasicActor: UntypedActor

    {

        annullamento protetto void OnReceive (messaggio oggetto)

        {

            if (il messaggio è una stringa)

            {

                var msg = messaggio come stringa;

                Console.WriteLine (msg);

            }

        }

    }

Per creare un'istanza di un attore, dovresti sfruttare la Akka.Actor.ActorSystemclasse. Un ActorSystempuò essere definito come un insieme gerarchico di attori che hanno una configurazione identica. Il seguente frammento di codice mostra come creare un'istanza della nostra BasicActorclasse e quindi passarvi i messaggi.

static void Main (string [] args)

        {

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

            var basicActor = actorSystem.ActorOf ();

            basicActor.Tell ("Hello World!");

            Console.ReadLine ();

        }

Va notato qui che quando si invia un messaggio a un attore, il messaggio viene consegnato a una cassetta postale ordinata in ordine FIFO (primo entrato, primo uscito). La cassetta postale inoltra il messaggio al OnReceivemetodo solo quando l'attore è disponibile per elaborarlo.

Ecco l'elenco completo del codice per riferimento.

utilizzando Akka.Actor;

using System;

spazio dei nomi AkkaDemo

{

    programma di classe

    {

        static void Main (string [] args)

        {

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

            var basicActor = actorSystem.ActorOf ();

            basicActor.Tell ("Hello World!");

            Console.ReadLine ();

        }

    }

    classe pubblica BasicActor: UntypedActor

    {

       annullamento protetto void OnReceive (messaggio oggetto)

        {

            if (il messaggio è una stringa)

            {

                var msg = messaggio come stringa;

                Console.WriteLine (msg);

            }

        }

    }

}

Quando esegui il programma sopra, il messaggio "Hello World!" verrà visualizzato nella finestra della console.

Akka.Net è un'ottima scelta quando hai bisogno di concorrenza e calcolo distribuito, in quanto ti consente di lavorare con astrazioni di alto livello al posto di thread e co-routine. È resiliente per progettazione e supporta bilanciamento del carico adattivo, partizionamento, instradamento e comunicazione remota basata sulla configurazione.

Rivisiterò Akka.Net nei prossimi post qui. Fino ad allora, puoi saperne di più su Akka.Net e sul modello dell'attore esplorando i contenuti disponibili nel bootcamp Akka.Net di Petabridge.