DEV Community

Cover image for Olá Mundo com Proto.Actor: Construindo Seu Primeiro Sistema Baseado no Modelo de Atores em .NET
Rafael Andrade
Rafael Andrade

Posted on

1

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  
Enter fullscreen mode Exit fullscreen mode

Adicione o pacote Proto.Actor:

dotnet add package Proto.Actor  
Enter fullscreen mode Exit fullscreen mode

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);  
Enter fullscreen mode Exit fullscreen mode

*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;
    }
}
Enter fullscreen mode Exit fullscreen mode

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 
}
Enter fullscreen mode Exit fullscreen mode

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

Top comments (0)

Playwright CLI Flags Tutorial

5 Playwright CLI Flags That Will Transform Your Testing Workflow

  • --last-failed: Zero in on just the tests that failed in your previous run
  • --only-changed: Test only the spec files you've modified in git
  • --repeat-each: Run tests multiple times to catch flaky behavior before it reaches production
  • --forbid-only: Prevent accidental test.only commits from breaking your CI pipeline
  • --ui --headed --workers 1: Debug visually with browser windows and sequential test execution

Learn how these powerful command-line options can save you time, strengthen your test suite, and streamline your Playwright testing experience. Practical examples included!

Watch Video 📹️

👋 Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay