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.
- 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. - Dodaj kolejny projekt aplikacji konsolowej i nadaj mu nazwę
Client
. - 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. - Dodaj kolejną bibliotekę klas i nadaj jej nazwę
Grains
.
Usuwanie domyślnych plików źródłowych
- Usuń Class1.cs z Grains.
- Usuń Class1.cs z GrainInterfaces.
Dodawanie odwołań
- Grains odwołania GrainInterfaces.
- Silos odnosi się do zboża.
- 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:
- Konfiguruje IHost do używania Orleans z metodą UseOrleans.
- Określa, że dostawca klastrowania localhost powinien być używany z metodą UseLocalhostClustering(ISiloBuilder, Int32, Int32, IPEndPoint, String, String).
- Uruchamia
host
i czeka na zakończenie procesu, nasłuchując na Ctrl+C lubSIGTERM
.
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ż
- Lista pakietów Orleans
- przewodnik konfiguracji Orleans
- Orleans najlepszych praktyk