Руководство: Создание минимального приложения Orleans
В этом руководстве описаны пошаговые инструкции по созданию базовых движущихся частей, общих для большинства приложений Orleans. Он предназначен быть самодостаточным и минималистичным.
В этом руководстве отсутствует соответствующая обработка ошибок и другой важный код, который будет полезен для рабочей среды. Тем не менее, это поможет вам получить практические сведения о общей структуре приложений для Orleans и позволит вам сосредоточиться на продолжении обучения на частях, наиболее важных для вас.
Необходимые условия
Настройка проекта
В этом руководстве вы создадите четыре проекта в рамках одного решения:
- Библиотека, содержащая интерфейсы зерна.
- Библиотека, содержащая классы зерна.
- Консольное приложение для размещения Silo.
- Консольное приложение для хостинга клиента.
Создание структуры в Visual Studio
Замените код по умолчанию кодом, заданным для каждого проекта.
- Начните с создания проекта консольного приложения в новом решении. Назовите часть проекта "silo" и назовите решение
OrleansHelloWorld
. Дополнительные сведения о создании консольного приложения см. в руководстве по созданию консольного приложения .NET с помощью Visual Studio. - Добавьте другой проект консольного приложения и назовите его
Client
. - Добавьте библиотеку классов и назовите ее
GrainInterfaces
. Сведения о создании библиотеки классов см. в руководстве по созданию библиотеки классов .NET с помощью Visual Studio. - Добавьте другую библиотеку классов и назовите ее
Grains
.
Удаление исходных файлов по умолчанию
- Удалите Class1.cs из Grains.
- Удалите Class1.cs из GrainInterfaces.
Добавление ссылок
- Зёрна ссылки GrainInterfaces.
- Silo ссылается на зерна.
- Клиент ссылается на GrainInterfaces.
Добавьте пакеты NuGet Orleans
Проект | Пакет NuGet |
---|---|
Силос | Microsoft.Orleans.Server Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
Клиент | Microsoft.Orleans.Client Microsoft.Extensions.Logging.Console Microsoft.Extensions.Hosting |
Интерфейсы зерна | Microsoft.Orleans.Sdk |
Зерна | Microsoft.Orleans.Sdk Microsoft.Extensions.Logging.Abstractions |
Microsoft.Orleans.Server
, Microsoft.Orleans.Client
и Microsoft.Orleans.Sdk
— это метапакеты, которые включают зависимости, которые, скорее всего, потребуются на Silo и клиенте. Дополнительные сведения о добавлении ссылок на пакеты см. в разделе dotnet add package или Install and manage packages in Visual Studio using the NuGet Package Manager.
Определите интерфейс зерна
В проекте GrainInterfaces добавьте файл кода IHello.cs и определите в этом файле следующий интерфейс IHello
.
namespace GrainInterfaces;
public interface IHello : IGrainWithIntegerKey
{
ValueTask<string> SayHello(string greeting);
}
Определите зерновой класс
В проекте Grains добавьте файл кода HelloGrain.cs и определите в нем следующий класс.
using GrainInterfaces;
using Microsoft.Extensions.Logging;
namespace Grains;
public class HelloGrain : Grain, IHello
{
private readonly ILogger _logger;
public HelloGrain(ILogger<HelloGrain> logger) => _logger = logger;
ValueTask<string> IHello.SayHello(string greeting)
{
_logger.LogInformation("""
SayHello message received: greeting = "{Greeting}"
""",
greeting);
return ValueTask.FromResult($"""
Client said: "{greeting}", so HelloGrain says: Hello!
""");
}
}
Создание силоса
Чтобы создать проект Silo, добавьте код для инициализации сервера, на котором размещаются и запущены зерна — silo. Вы используете поставщик кластеризации localhost, который позволяет выполнять все локально без зависимости от внешних систем хранения. Для получения дополнительной информации см. Конфигурация локальной разработки. В этом примере вы запускаете кластер с одним хранилищем в нем.
Добавьте следующий код в Program.cs проекта Silo:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseLocalhostClustering()
.ConfigureLogging(logging => logging.AddConsole());
})
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.RunAsync();
Предыдущий код:
- Настраивает IHost для использования Orleans с методом UseOrleans.
- Указывает, что для использования с методом UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) следует выбрать локальный кластерный провайдер.
- Запускает
host
и ожидает завершения процесса, прослушивая CTRL+C илиSIGTERM
.
Создание клиента
Наконец, необходимо настроить клиент для взаимодействия с зернами, подключить его к кластеру (с одним сило в нем) и вызвать зерно. Конфигурация кластеризации должна совпадать с конфигурацией, используемой для silo. Дополнительные сведения см. о кластерах и клиентах .
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using GrainInterfaces;
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleansClient(client =>
{
client.UseLocalhostClustering();
})
.ConfigureLogging(logging => logging.AddConsole())
.UseConsoleLifetime();
using IHost host = builder.Build();
await host.StartAsync();
IClusterClient client = host.Services.GetRequiredService<IClusterClient>();
IHello friend = client.GetGrain<IHello>(0);
string response = await friend.SayHello("Hi friend!");
Console.WriteLine($"""
{response}
Press any key to exit...
""");
Console.ReadKey();
await host.StopAsync();
Запуск приложения
Создайте решение и запустите Silo. Получив сообщение подтверждения о работе Silo, запустите клиент.
Чтобы запустить Silo из командной строки, выполните следующую команду из каталога, содержащего файл проекта Silo:
dotnet run
Вы увидите многочисленные результаты в рамках запуска Silo. После просмотра следующего сообщения вы будете готовы к запуску клиента:
Application started. Press Ctrl+C to shut down.
В каталоге клиентского проекта выполните ту же команду .NET CLI в отдельном окне терминала, чтобы запустить клиент:
dotnet run
Дополнительные сведения о запуске приложений .NET см. в разделе dotnet run. Если вы используете Visual Studio, вы можете настроить несколько запускаемых проектов.
См. также
- список пакетов Orleans
- руководство по настройке Orleans
- Orleans рекомендации