Udostępnij za pośrednictwem


Samouczek: tworzenie minimalnej aplikacji Orleans

W tym samouczku podążasz za szczegółowymi instrukcjami krok po kroku, aby stworzyć podstawowe ruchome elementy wspólne dla większości aplikacji Orleans. Został zaprojektowany tak, aby był samowystarczalny i minimalistyczny.

W tym samouczku brakuje odpowiedniej obsługi błędów i innego istotnego kodu, który byłby przydatny w środowisku produkcyjnym. Jednak powinno to pomóc w praktycznym zrozumieniu wspólnej struktury aplikacji dla Orleans i pozwolić skupić się na ciągłym uczeniu się na najbardziej odpowiednich częściach.

Warunki wstępne

Konfiguracja 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. Określ część projektu jako silos i nazwij rozwiązanie OrleansHelloWorld. 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 nazwę Client.
  3. Dodaj bibliotekę klas i nadaj jej nazwę GrainInterfaces. 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 nazwę Grains.

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

  1. Usuń Class1.cs z Grains.
  2. Usuń Class1.cs z GrainInterfaces.

Dodawanie odwołań

  1. Grains odwołania GrainInterfaces.
  2. Silos odnosi się do zboża.
  3. Client odnosi się do GrainInterfaces.

Dodaj pakiety NuGet Orleans

Projekt Pakiet NuGet
Silos 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.Server, Microsoft.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 lub Instalowanie i zarządzanie pakietami w Visual Studio za pomocą Menedżera pakietów NuGet.

Definiowanie interfejsu ziarna

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

namespace GrainInterfaces;

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

Definiowanie klasy ziarna

W projekcie Grains dodaj plik HelloGrain.cs z kodem 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 Lokalnego Rozwoju. W tym przykładzie uruchomisz klaster z jednym silosem.

Dodaj następujący kod do pliku Program.cs w projekcie 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:

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 Clusters and Clients.

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 Silo. Po otrzymaniu komunikatu z potwierdzeniem, że Silo 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 .NET CLI 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ż