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").
Top comments (0)