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


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

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

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

Необходимые компоненты

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

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

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

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

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

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

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

  1. Удаление Class1.cs из зерна.
  2. Удаление Class1.cs из GrainInterfaces.

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

  1. Зерна ссылается на GrainInterfaces.
  2. Silo ссылается на Зерна.
  3. Клиент ссылается на 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();

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

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

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

См. также