Руководство. Создание минимального Orleans приложения
В этом руководстве описаны пошаговые инструкции по созданию базовых движущихся частей, распространенных для большинства Orleans приложений. Он предназначен для самостоятельного и минималистического.
В этом руководстве отсутствует соответствующая обработка ошибок и другой важный код, который будет полезен для рабочей среды. Однако это поможет вам получить практические сведения о общей структуре Orleans приложений и сосредоточиться на продолжении обучения на наиболее важных для вас частях.
Необходимые компоненты
Настройка проекта
В этом руководстве вы создадите четыре проекта в рамках одного решения:
- Библиотека, содержащая интерфейсы зерна.
- Библиотека, содержащая классы зерна.
- Консольное приложение для размещения Silo.
- Консольное приложение для размещения клиента.
Создание структуры в Visual Studio
Замените код по умолчанию кодом, заданным для каждого проекта.
- Начните с создания проекта консольного приложения в новом решении. Вызовите часть проекта и назовите решение
OrleansHelloWorld
. Дополнительные сведения о создании консольного приложения см. в руководстве по созданию консольного приложения .NET с помощью Visual Studio. - Добавьте другой проект консольного приложения и назовите его
Client
. - Добавьте библиотеку классов и назовите ее
GrainInterfaces
. Сведения о создании библиотеки классов см. в руководстве по созданию библиотеки классов .NET с помощью Visual Studio. - Добавьте другую библиотеку классов и назовите ее
Grains
.
Удаление исходных файлов по умолчанию
- Удаление Class1.cs из зерна.
- Удаление Class1.cs из GrainInterfaces.
Добавление ссылок
- Зерна ссылается на GrainInterfaces.
- Silo ссылается на Зерна.
- Клиент ссылается на GrainInterfaces.
Добавление Orleans пакетов NuGet
Проекты | Пакет 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 or Install and manage packages in Visual Studio using the NuGet диспетчер пакетов.
Определение интерфейса зерна
В проекте GrainInterfaces добавьте файл кода IHello.cs и определите в нем следующий IHello
интерфейс:
namespace GrainInterfaces;
public interface IHello : IGrainWithIntegerKey
{
ValueTask<string> SayHello(string greeting);
}
Определение класса grain
В проекте 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, добавьте код для инициализации сервера, на котором размещаются и запущены зерна — 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 .
- Указывает, что поставщик localhost кластеризация должен использоваться с методом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, можно настроить несколько запускаемых проектов.