Olá Mundo com Proto.Actor: Construindo Seu Primeiro Sistema Baseado no Modelo de Atores em .NET

No meu artigo anterior sobre o Modelo de Atores, apresentei o framework Proto.Actor. Hoje, vou demonstrar um exemplo simples de "Hello World" para ilustrar seus conceitos principais. Por que Proto.Actor? O Proto.Actor foi criado pelo desenvolvedor responsável pela adaptação do Akka (de Java para .NET). Baseando-se nas lições aprendidas nesse projeto, a equipe priorizou o uso de tecnologias existentes em vez de reinventar a roda. Por exemplo, o Proto.Actor usa gRPC para serialização, ao invés de manter uma solução personalizada como o Akka.NET. Esse foco em simplicidade e interoperabilidade o torna uma escolha interessante para sistemas baseados em atores. Outro destaque é a excelente documentação do Proto.Actor, que oferece insights profundos tanto sobre o Modelo de Atores quanto sobre o uso prático do framework. Pré-requisitos SDK do .NET 6+ instalado Conhecimento básico de C# Passo 1: Criar um Projeto Crie um novo projeto de console: dotnet new console -n ProtoActorDemo Adicione o pacote Proto.Actor: dotnet add package Proto.Actor Passo 2: Definir Mensagens Os atores se comunicam por meio de mensagens. Em C#, os tipos record são ideais devido à sua imutabilidade: public record Hello(string Who); *Por que imutabilidade? Mensagens imutáveis evitam efeitos colaterais e garantem segurança de threads — um princípio central do Modelo de Atores. Passo 3: Implementar um Ator Os atores processam mensagens de forma assíncrona. Crie um GreetingActor implementando IActor: public class GreetingActor : IActor { public Task ReceiveAsync(IContext context) { if (context.Message is Hello hello) { Console.WriteLine($"Olá, {hello.Who}!"); } return Task.CompletedTask; } } Passo 4: Iniciar o Sistema de Atores Inicialize o sistema, crie o ator e envie mensagens: var system = new ActorSystem(); var props = Props.FromProducer(() => new GreetingActor()); var greeter = system.Root.Spawn(props); while (true) { Console.Write("Digite seu nome (q para sair): "); var name = Console.ReadLine(); if (string.IsNullOrEmpty(name)) { continue; } if (name == "q") { break; } system.Root.Send(greeter, new Hello(name)); await Task.Delay(TimeSpan.FromSeconds(1)); // Dê algum tempo para o sistema de atores processar a mensagem } Conclusão Com poucas linhas de código, criamos um sistema funcional de atores! A simplicidade e a documentação do Proto.Actor facilitam muito o início com o framework. Próximo passo: Exploraremos atores virtuais (também conhecidos como "grains"). Referências Documentação Oficial do Proto.Actor

Mar 21, 2025 - 10:14
 0
Olá Mundo com Proto.Actor: Construindo Seu Primeiro Sistema Baseado no Modelo de Atores em .NET

No meu artigo anterior sobre o Modelo de Atores, apresentei o framework Proto.Actor. Hoje, vou demonstrar um exemplo simples de "Hello World" para ilustrar seus conceitos principais.

Por que Proto.Actor?

O Proto.Actor foi criado pelo desenvolvedor responsável pela adaptação do Akka (de Java para .NET). Baseando-se nas lições aprendidas nesse projeto, a equipe priorizou o uso de tecnologias existentes em vez de reinventar a roda. Por exemplo, o Proto.Actor usa gRPC para serialização, ao invés de manter uma solução personalizada como o Akka.NET. Esse foco em simplicidade e interoperabilidade o torna uma escolha interessante para sistemas baseados em atores.

Outro destaque é a excelente documentação do Proto.Actor, que oferece insights profundos tanto sobre o Modelo de Atores quanto sobre o uso prático do framework.

Pré-requisitos

  • SDK do .NET 6+ instalado
  • Conhecimento básico de C#

Passo 1: Criar um Projeto

Crie um novo projeto de console:

dotnet new console -n ProtoActorDemo  

Adicione o pacote Proto.Actor:

dotnet add package Proto.Actor  

Passo 2: Definir Mensagens

Os atores se comunicam por meio de mensagens. Em C#, os tipos record são ideais devido à sua imutabilidade:

public record Hello(string Who);  

*Por que imutabilidade?

Mensagens imutáveis evitam efeitos colaterais e garantem segurança de threads — um princípio central do Modelo de Atores.

Passo 3: Implementar um Ator

Os atores processam mensagens de forma assíncrona. Crie um GreetingActor implementando IActor:

public class GreetingActor : IActor  
{
    public Task ReceiveAsync(IContext context)
    {
        if (context.Message is Hello hello)
        {
            Console.WriteLine($"Olá, {hello.Who}!");
        }
        return Task.CompletedTask;
    }
}

Passo 4: Iniciar o Sistema de Atores

Inicialize o sistema, crie o ator e envie mensagens:

var system = new ActorSystem();  
var props = Props.FromProducer(() => new GreetingActor());
var greeter = system.Root.Spawn(props);  

while (true)  
{  
    Console.Write("Digite seu nome (q para sair): ");  
    var name = Console.ReadLine();  

    if (string.IsNullOrEmpty(name))
    { 
        continue;  
    }

    if (name == "q") 
    {
        break;  
    }

    system.Root.Send(greeter, new Hello(name)); 
    await Task.Delay(TimeSpan.FromSeconds(1)); // Dê algum tempo para o sistema de atores processar a mensagem 
}

Conclusão

Com poucas linhas de código, criamos um sistema funcional de atores! A simplicidade e a documentação do Proto.Actor facilitam muito o início com o framework.

Próximo passo: Exploraremos atores virtuais (também conhecidos como "grains").

Referências

Documentação Oficial do Proto.Actor