Introdução à Arquitetura Actor-Based em .NET


A arquitetura baseada em atores é uma abordagem para criar sistemas distribuídos, concorrentes e resilientes. Em .NET, a implementação mais popular desse modelo é o Akka.NET e Microsoft Orleans, frameworks que trazem o modelo de atores para o ecossistema .NET.

Neste post, exmploro como funciona a arquitetura actor-based com Akka.NET, entender seus conceitos e ver um exemplo prático,


🤖 O que é uma Arquitetura Baseada em Atores?

A arquitetura baseada em atores usa o conceito de atores (como o proprio nome diz :/ ) como as menores unidades de processamento. Cada ator é responsável por:

  • Receber mensagens 📩
  • Processar mensagens 🔄
  • Manter seu próprio estado 🔐

E o mais interessante: os atores não compartilham estado entre si. Toda a comunicação ocorre por meio de mensagens assíncronas!

Principais Conceitos

  1. Atores: Entidades que processam mensagens.
  2. Mensagens: O meio de comunicação entre os atores.
  3. ActorSystem: Um contêiner que gerencia os atores.
  4. Supervisão: Atores “pais” supervisionam atores “filhos”, podendo reiniciar ou parar atores que falham.

Exemplo de Código: Criando um Ator Simples

Agora vamos ver um exemplo básico de como criar um ator em Akka.NET. Aqui, vamos criar um ator simples que recebe e imprime mensagens:

using System;
using Akka.Actor;

public class SimpleActor : ReceiveActor
{
    public SimpleActor()
    {
        // Definindo como o ator reage às mensagens
        Receive<string>(message =>
        {
            Console.WriteLine($"Mensagem recebida: {message}");
        });
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criando o ActorSystem
        var actorSystem = ActorSystem.Create("meuSistemaDeAtores");

        // Criando um ator
        var simpleActor = actorSystem.ActorOf<SimpleActor>("meuAtor");

        // Enviando uma mensagem para o ator
        simpleActor.Tell("Olá, Ator!");

        // Mantendo o sistema vivo até pressionar uma tecla
        Console.ReadKey();

        // Finalizando o ActorSystem
        actorSystem.Terminate().Wait();
    }
}

Referências

[1] - https://getakka.net/

[2] - https://learn.microsoft.com/en-us/dotnet/orleans/overview