Udostępnij za pośrednictwem


Samouczek: tworzenie minimalnej Orleans aplikacji

W tym samouczku wykonasz instrukcje krok po kroku, aby utworzyć podstawowe części wspólne dla większości Orleans aplikacji. Został zaprojektowany tak, aby był samodzielny i minimalistyczny.

W tym samouczku brakuje odpowiedniej obsługi błędów i innego podstawowego kodu, który byłby przydatny w środowisku produkcyjnym. Jednak powinno to pomóc w praktycznym zrozumieniu wspólnej struktury Orleans aplikacji i umożliwieniu skoncentrowania ciągłego uczenia się na najbardziej odpowiednich częściach.

Wymagania wstępne

Ustawienia projektu

W tym samouczku utworzysz cztery projekty w ramach tego samego rozwiązania:

  • Biblioteka zawierająca interfejsy ziarna.
  • Biblioteka zawierająca klasy ziarna.
  • Aplikacja konsolowa do hostowania silosu.
  • Aplikacja konsolowa do hostowania klienta.

Tworzenie struktury w programie Visual Studio

Zastąp domyślny kod kodem podanym dla każdego projektu.

  1. Zacznij od utworzenia projektu aplikacji konsolowej w nowym rozwiązaniu. Wywołaj silos części projektu i nadaj rozwiązaniu OrleansHelloWorldnazwę . Aby uzyskać więcej informacji na temat tworzenia aplikacji konsolowej, zobacz Samouczek: tworzenie aplikacji konsolowej platformy .NET przy użyciu programu Visual Studio.
  2. Dodaj kolejny projekt aplikacji konsolowej i nadaj mu Clientnazwę .
  3. Dodaj bibliotekę klas i nadaj jej GrainInterfacesnazwę . Aby uzyskać informacje na temat tworzenia biblioteki klas, zobacz Samouczek: tworzenie biblioteki klas platformy .NET przy użyciu programu Visual Studio.
  4. Dodaj kolejną bibliotekę klas i nadaj jej Grainsnazwę .

Usuwanie domyślnych plików źródłowych

  1. Usuń Class1.cs z ziarna.
  2. Usuń Class1.cs z grainInterfaces.

Dodawanie odwołań

  1. Ziarna odwołują się do GrainInterfaces.
  2. Silos odwołuje się do ziarna.
  3. Klient odwołuje się do grainInterfaces.

Dodawanie Orleans pakietów NuGet

Projekt Pakiet NuGet
Silosu Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Klient Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Interfejsy ziarna Microsoft.Orleans.Sdk
Ziarna Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.ServerMicrosoft.Orleans.Client, i Microsoft.Orleans.Sdk są metapakietami, które przynoszą zależności, których najprawdopodobniej będziesz potrzebować na silosie i kliencie. Aby uzyskać więcej informacji na temat dodawania odwołań do pakietów, zobacz dotnet add package (Dodawanie pakietu dotnet) lub Install and manage packages in Visual Studio using the NuGet Menedżer pakietów (Instalowanie pakietów i zarządzanie nimi w programie Visual Studio przy użyciu Menedżer pakietów NuGet).

Definiowanie interfejsu ziarna

W projekcie GrainInterfaces dodaj plik kodu IHello.cs i zdefiniuj w nim następujący IHello interfejs:

namespace GrainInterfaces;

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

Definiowanie klasy ziarna

W projekcie Grains dodaj plik kodu HelloGrain.cs i zdefiniuj w nim następującą klasę:

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

Tworzenie silosu

Aby utworzyć projekt Silo, dodaj kod, aby zainicjować serwer hostujący i uruchamiający ziarna — silos. Używasz dostawcy klastrowania localhost, który umożliwia uruchamianie wszystkiego lokalnie bez zależności od zewnętrznych systemów magazynowania. Aby uzyskać więcej informacji, zobacz Konfiguracja programowania lokalnego. W tym przykładzie uruchomisz klaster z jednym silosem.

Dodaj następujący kod, aby 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();

Powyższy kod ma następujące działanie:

Tworzenie klienta

Na koniec należy skonfigurować klienta do komunikowania się z ziarnami, połączyć go z klastrem (z jednym silosem w nim) i wywołać ziarno. Konfiguracja klastrowania musi być zgodna z konfiguracją użytą do silosu. Aby uzyskać więcej informacji, zobacz Klastry i klienci

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

Uruchamianie aplikacji

Skompiluj rozwiązanie i uruchom silos. Po otrzymaniu komunikatu z potwierdzeniem, że silos jest uruchomiony, uruchom klienta.

Aby uruchomić silos z wiersza polecenia, uruchom następujące polecenie z katalogu zawierającego plik projektu Silo:

dotnet run

W ramach uruchamiania silosu zobaczysz wiele danych wyjściowych. Po obejrzeniu następującego komunikatu możesz uruchomić klienta:

Application started. Press Ctrl+C to shut down.

W katalogu projektu klienta uruchom to samo polecenie interfejsu wiersza polecenia platformy .NET w osobnym oknie terminalu, aby uruchomić klienta:

dotnet run

Aby uzyskać więcej informacji na temat uruchamiania aplikacji platformy .NET, zobacz dotnet run. Jeśli używasz programu Visual Studio, możesz skonfigurować wiele projektów startowych.

Zobacz też