Kurz: Vytvoření minimální Orleans aplikace

V tomto kurzu postupujte podle podrobných pokynů k vytvoření základních částí, které jsou společné pro většinu Orleans aplikací. Je navržená tak, aby byla samostatná a minimalistická.

V tomto kurzu chybí odpovídající zpracování chyb a další základní kód užitečný pro produkční prostředí. Měla by vám ale pomoct získat praktické znalosti o společné Orleans struktuře aplikací a umožnit vám zaměřit se na další učení na části, které jsou pro vás nejdůležitější.

Návod

U aplikací připravených pro produkční prostředí Orleans zvažte použití Aspire ke zjednodušení správy prostředků, zjišťování služeb, pozorovatelnosti a nasazení. Aspire zpracovává konfiguraci clusteringu, úložiště pro jádra, připomenutí a automatického streamování automaticky. Další AspireOrleans informace najdete v integraci.

Požadavky

Nastavení projektu

Pro účely tohoto kurzu vytvořte čtyři projekty jako součást stejného řešení:

  • Knihovna obsahující rozhraní pro obilí.
  • Knihovna k obsahování tříd obilovin.
  • konzolová aplikace pro provoz sila
  • Konzolová aplikace pro hostování klienta

Vytvoření struktury v Visual Studio

Nahraďte výchozí kód kódem zadaným pro každý projekt.

  1. Začněte vytvořením projektu konzolové aplikace v novém řešení. Zavolejte projekt Silo a pojmenujte řešení OrleansHelloWorld. Další informace o vytvoření konzolové aplikace najdete v tématu Tutorial: Vytvoření konzolové aplikace .NET.
  2. Přidejte další projekt konzolové aplikace a pojmenujte ho Client.
  3. Přidejte knihovnu tříd a pojmenujte ji GrainInterfaces. Informace o vytvoření knihovny tříd najdete v tématu Tutorial: Vytvoření knihovny tříd .NET.
  4. Přidejte další knihovnu tříd a pojmenujte ji Grains.

Odstranění výchozích zdrojových souborů

  1. Odstraňte Class1.cs z Grains.
  2. Odstraňte Class1.cs z GrainInterfaces.

Přidání odkazů

  1. Zrna odkazy GrainInterfaces.
  2. silo odkazy na obilí.
  3. Klient odkazuje na GrainInterfaces.

Přidejte balíčky NuGet Orleans

Projekt Balíček NuGet
Silo Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Klient Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Rozhraní zrn Microsoft.Orleans.Sdk
Zrna Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.Server, Microsoft.Orleans.Client a Microsoft.Orleans.Sdk jsou metabalíčky, které pravděpodobně budete potřebovat pro silo a klienta. Další informace o přidávání odkazů na balíčky najdete v tématu dotnet package add nebo Install and manage packages in Visual Studio using nuGet Správce balíčků.

Definovat rozhraní zrna

V projektu GrainInterfaces přidejte soubor kódu IHello.cs a definujte následující IHello rozhraní:

namespace GrainInterfaces;

public interface IHello : IGrainWithIntegerKey
{
    ValueTask<string> SayHello(string greeting);
}

Definování třídy zrnitosti

V projektu Zrna přidejte soubor kódu HelloGrain.cs a definujte následující třídu:

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!
            """);
    }
}

Vytvoř silo

Pokud chcete vytvořit projekt Silo, přidejte kód pro inicializaci serveru, který hostuje a spouští zrna – silo. Použijte poskytovatele clusteringu localhost, který umožňuje místní spouštění všeho bez závislosti na externích systémech úložiště. Další informace naleznete v části Konfigurace místního vývoje. V tomto příkladu spusťte cluster s jedním silem.

Přidejte následující kód do Program.cs projektu 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();

Předchozí kód:

Vytvoření klienta

Nakonec nakonfigurujte klienta tak, aby komunikoval se zrnkami, připojili ho ke clusteru (s jedním silo) a vyvolali grain. Konfigurace clusteringu se musí shodovat s tou, která se používá pro silo. Další informace naleznete v tématu clustery a klienti.

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();

Spuštění aplikace

Sestavte řešení a spusťte Silo. Po přijetí potvrzovací zprávy, že Silo běží, spusťte klienta.

Pokud chcete spustit Silo z příkazového řádku, použijte následující příkaz v adresáři, který obsahuje soubor projektu Silo:

dotnet run

Při spuštění systému Silo uvidíte mnoho výstupů. Po zobrazení následující zprávy jste připraveni spustit klienta:

Application started. Press Ctrl+C to shut down.

V adresáři klientského projektu spusťte stejný příkaz .NET rozhraní příkazového řádku v samostatném okně terminálu a spusťte klienta:

dotnet run

Další informace o spouštění aplikací .NET najdete v tématu dotnet run. Pokud používáte Visual Studio, můžete konfigurovat více projektů po spuštění.

Viz také