Могу ли я использовать Орлеана для актеров / актеров? - PullRequest
0 голосов
/ 24 апреля 2019

Я играю с Орлеаном, но вместо того, чтобы полагаться на сеть и, следовательно, на конфигурацию конечных точек, я бы предпочел иметь возможность обрабатывать зерна в следующем коде:

public interface IGreeter : IActorGrain
{
}

public class Greeter : DispatchActorGrain, IGreeter
{
    void On(Greet msg) => WriteLine($"Hello, {msg.Who}");
}

[SerializableAttribute]
public class Greet
{
    public string Who { get; set; }
}

public static class Program
{
    public static async Task Main()
    {
        WriteLine("Running example. Booting cluster might take some time ...\n");

        var host = new SiloHostBuilder()
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "localhost-demo";
                options.ServiceId = "localhost-demo-service";
            })
            .Configure<SchedulingOptions>(options =>
            {
                options.AllowCallChainReentrancy = false;
            })
            .Configure<SiloMessagingOptions>(options =>
            {
                options.ResponseTimeout = TimeSpan.FromSeconds(5);
                options.ResponseTimeoutWithDebugger = TimeSpan.FromSeconds(5);
            })
            .ConfigureLogging(logging =>
            {
                logging.SetMinimumLevel(LogLevel.Information);
                logging.AddConsole();
            })
            .UseDevelopmentClustering(options => options.PrimarySiloEndpoint = new IPEndPoint(IPAddress.Loopback, 30000))
            .ConfigureEndpoints(IPAddress.Loopback, 11111, 30000)
            .ConfigureApplicationParts(x => x
                .AddApplicationPart(Assembly.GetExecutingAssembly())
                .WithCodeGeneration())
            .UseOrleankka()
            .Build();

        await host.StartAsync();

        var client = new ClientBuilder()
            .Configure<ClusterOptions>(options => {
                options.ClusterId = "localhost-demo";
                options.ServiceId = "localhost-demo-service";
            })
            .UseStaticClustering(options => options.Gateways.Add(new IPEndPoint(IPAddress.Loopback, 30000).ToGatewayUri()))
            .ConfigureApplicationParts(x => x
                .AddApplicationPart(Assembly.GetExecutingAssembly())
                .WithCodeGeneration())
            .UseOrleankka()
            .Build();

        await client.Connect();

        var greeter = client.ActorSystem().ActorOf<IGreeter>("id");
        await greeter.Tell(new Greet {Who = "world"});

        Write("\n\nPress any key to terminate ...");
        ReadKey(true);
    }
}

Возможно ли это?

1 Ответ

1 голос
/ 03 июля 2019

Вполне возможно использовать Орлеан как отдельный процесс без кластеризации (что я делал на этапах тестирования и подготовки к выпуску), но вы потеряете доступность.

Предполагается, что бункеры будут работать так же долго.запуск процессов в кластере, поэтому ~ 30 секунд время запуска одного узла никогда не должно быть проблемой для облачных сред.Если вам нужна система с одним хостом, лучшим решением может быть akka.net

...