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.
- Zacznij od utworzenia projektu aplikacji konsolowej w nowym rozwiązaniu. Wywołaj silos części projektu i nadaj rozwiązaniu
OrleansHelloWorld
nazwę . Aby uzyskać więcej informacji na temat tworzenia aplikacji konsolowej, zobacz Samouczek: tworzenie aplikacji konsolowej platformy .NET przy użyciu programu Visual Studio. - Dodaj kolejny projekt aplikacji konsolowej i nadaj mu
Client
nazwę . - Dodaj bibliotekę klas i nadaj jej
GrainInterfaces
nazwę . Aby uzyskać informacje na temat tworzenia biblioteki klas, zobacz Samouczek: tworzenie biblioteki klas platformy .NET przy użyciu programu Visual Studio. - Dodaj kolejną bibliotekę klas i nadaj jej
Grains
nazwę .
Usuwanie domyślnych plików źródłowych
- Usuń Class1.cs z ziarna.
- Usuń Class1.cs z grainInterfaces.
Dodawanie odwołań
- Ziarna odwołują się do GrainInterfaces.
- Silos odwołuje się do ziarna.
- 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.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 (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:
- Konfiguruje element IHost do użycia Orleans z UseOrleans metodą .
- Określa, że dostawca klastrowania localhost powinien być używany z UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String) metodą .
- Uruchamia element
host
i czeka na zakończenie procesu, nasłuchując klawiszy Ctrl+C lub .SIGTERM
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.