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


Руководство: Создание минимального приложения 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 package add или разделе "Установка и управление пакетами в Visual Studio с помощью диспетчера пакетов NuGet".

Определите интерфейс зерна

В проекте 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();

Предыдущий код:

Создание клиента

Наконец, настройте клиент для связи с зернами, подключите его к кластеру (с одним силосом), и вызовите зерно. Конфигурация кластеризации должна соответствовать конфигурации, используемой для 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, вы можете настроить несколько запускаемых проектов.

См. также