Поделиться через


Руководство: Создание минимального приложения Orleans

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

В этом руководстве отсутствует соответствующая обработка ошибок и другой важный код, который будет полезен для рабочей среды. Тем не менее, это поможет вам получить практические сведения о общей структуре приложений для Orleans и позволит вам сосредоточиться на продолжении обучения на частях, наиболее важных для вас.

Необходимые условия

Настройка проекта

В этом руководстве вы создадите четыре проекта в рамках одного решения:

  • Библиотека, содержащая интерфейсы зерна.
  • Библиотека, содержащая классы зерна.
  • Консольное приложение для размещения Silo.
  • Консольное приложение для хостинга клиента.

Создание структуры в Visual Studio

Замените код по умолчанию кодом, заданным для каждого проекта.

  1. Начните с создания проекта консольного приложения в новом решении. Назовите часть проекта "silo" и назовите решение OrleansHelloWorld. Дополнительные сведения о создании консольного приложения см. в руководстве по созданию консольного приложения .NET с помощью Visual Studio.
  2. Добавьте другой проект консольного приложения и назовите его Client.
  3. Добавьте библиотеку классов и назовите ее GrainInterfaces. Сведения о создании библиотеки классов см. в руководстве по созданию библиотеки классов .NET с помощью Visual Studio.
  4. Добавьте другую библиотеку классов и назовите ее Grains.

Удаление исходных файлов по умолчанию

  1. Удалите Class1.cs из Grains.
  2. Удалите Class1.cs из GrainInterfaces.

Добавление ссылок

  1. Зёрна ссылки GrainInterfaces.
  2. Silo ссылается на зерна.
  3. Клиент ссылается на 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, вы можете настроить несколько запускаемых проектов.

См. также