Udostępnij przez


Samouczek: tworzenie minimalnej aplikacji Orleans

W tym samouczku postępuj zgodnie z instrukcjami krok po kroku, aby utworzyć podstawowe części wspólne dla większości Orleans aplikacji. Został zaprojektowany tak, aby był samowystarczalny i minimalistyczny.

W tym samouczku brakuje odpowiedniej obsługi błędów i innego podstawowego kodu przydatnego w środowisku produkcyjnym. Powinno to jednak pomóc w uzyskaniu praktycznego zrozumienia wspólnej Orleans struktury aplikacji i umożliwienia skupienia się na ciągłym uczeniu się na najbardziej odpowiednich częściach.

Warunki wstępne

Konfiguracja projektu

Na potrzeby tego samouczka utwórz cztery projekty w ramach tego samego rozwiązania:

  • Biblioteka zawierająca interfejsy ziarna.
  • Biblioteka zawierająca klasy ziaren.
  • 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 projekt Silo 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 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łują się do 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 wprowadzają zależności, których najprawdopodobniej będziesz potrzebował na serwerze Silo i kliencie. Aby uzyskać więcej informacji na temat dodawania odwołań do pakietów, zobacz dotnet package add or Install and manage packages in Visual Studio using the NuGet Package Manager (Dodawanie pakietów dotnet lub instalowanie pakietów i zarządzanie nimi w programie Visual Studio przy użyciu Menedżera pakietów NuGet).

Definiowanie interfejsu ziarna

W projekcie GrainInterfaces dodaj plik kodu IHello.cs i zdefiniuj 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 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żyj 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 uruchom klaster z pojedynczym 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 skonfiguruj klienta do komunikowania się z ziarnami, połącz go z klastrem (z jednym silosem) i wywołaj ziarno. Konfiguracja klastrowania musi być zgodna z konfiguracją używaną dla 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 potwierdzenia, ż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 .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ż