Прямой клиент Orleans в проекте ASP.NET Core

В настоящее время я рассматриваю Орлеан как бэкэнд для основного веб-API-интерфейса Asp.net, и мне было интересно, есть ли у кого-нибудь опыт работы с его новой функцией - "прямым клиентом". Документы Орлеана говорят: " Это позволяет совместно размещать клиента и хранилище таким образом, чтобы клиент мог более эффективно общаться не только с хранилищем, к которому он подключен, но и со всем кластером ", и я знаю, что вы можете написать что-то вроде этого (и это прекрасно работает в консольном приложении):

var silo = new SiloHostBuilder()
               .UseLocalhostClustering()
               .EnableDirectClient()
               .Build();

await silo.StartAsync();

var client = silo.Services.GetRequiredService<IClusterClient>();

Я изо всех сил пытаюсь выяснить, где поместить этот тип кода в проект asp.net, который имеет свой собственный конструктор веб-хостов в "Main" (должен ли он перейти в класс запуска в "ConfigureServices"?). В конце концов, мы стремимся к отдельной настройке клиент / сервер, но для более быстрой разработки было бы полезно поиграть с простой настройкой, которую, по-видимому, допускает прямой клиент. Будем благодарны за любые ссылки на ресурсы и / или примеры решений, содержащих прямой клиент с ядром asp.net. Благодарю.

1 ответ

Решение

Для ASP.NET 2.x & Orleans ниже 2.3, я рекомендую создать и запустить хранилище перед веб-хостингом. При настройке веб-хоста введите IGrainFactory & IClusterClient экземпляры из бункера (полученные через silo.Services):

var silo = new SiloHostBuilder()
    .UseLocalhostClustering()
    .EnableDirectClient()
    .Build();

await silo.StartAsync();

var client = silo.Services.GetRequiredService<IClusterClient>();

var webHost = new WebHostBuilder()
    .ConfigureServices(services =>
        services
            .AddSingleton<IGrainFactory>(client)
            .AddSingleton<IClusterClient>(client))
    .UseStartup<Startup>()
    // Other ASP.NET configuration...
    .Build();

Для ASP.NET 3.0 и Orleans 2.3 или более поздней версии код интеграции упрощается благодаря добавлению Microsoft.Extensions.Hosting поддержка в обеих системах:

var host = new HostBuilder()
    .ConfigureWebHost(builder =>
    {
        // Adding IGrainFactory, etc, is not necessary, since Orleans 
        // and ASP.NET share the same dependency injection container.
        builder.UseStartup<Startup>();
    })
    .UseOrleans(builder =>
    {
        // EnableDirectClient is no longer needed as it is enabled by default
        builder.UseLocalhostClustering();
    })
    .Build();

await host.StartAsync();
Другие вопросы по тегам