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
Subscribe to my newsletter
Read articles from Rafael Andrade directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
