Терминология
- Bee <--> Actor
- BeeSwarm <--> Many Actors
- BeeApiary <--> Actor system
Bee является рабочей единицой, внутри которой, код не требует блокировоко потому как, гарантированно выполняется в 1 потоке.
BeeSwarm просто несколько тех самых Bee но распределяют между собой работы, для обеспечения паралельного исполнения работы.
BeeApiary система виртуальных акторов, из нее можно запросить Bee по id, если его нет - он будет создан
Installation
- Install-Package JustActors
Features
- Receive reply from bee
- Retry on errors
- Swarm of bee
- Virtual actors
- Microsoft DI support
- Store\Restore state from external storage
- Bee life time (auto die)
Для того чтоб создать своего актора нужно реализовать AbstractBee где T тип сообщений для актора
public class LoggerBee : AbstractBee<ILoggerMessage>
{
private const string Path = "log.txt";
private readonly List<string> _log = new List<string>();
// simple helper
public void LogMessage(string message) => Post(new LogMessage(message));
public void Flush() => Post(new FlushMessage());
protected override async Task HandleMessage(ILoggerMessage msg)
{
switch (msg)
{
case LogMessage m:
_log.Add(m.Text);
break;
case FlushMessage _:
await File.WriteAllLinesAsync(Path, _log);
_log.Clear();
break;
}
}
protected override Task<HandleResult> HandleError(BeeMessage<ILoggerMessage> msg, Exception ex)
{
return msg.Attemp > 3 ? HandleResult.OkTask() : HandleResult.RetryTask();
}
}
Данный логгер очень быстро пишет лог и не блокирует нас на время записи в файл. Этот пример пишет файл только после команды, но конечно же это можно делать по таймеру или по какому-то лимиту, вы полностью свободны в реализации.
Больше примеров можно посмотреть здесь и примеры использования здесь