Freigeben über


Lernprogramm: Erstellen einer minimalen Orleans Anwendung

Folgen Sie den schrittweisen Anleitungen in diesem Lernprogramm, um die grundlegenden Komponenten zu erstellen, die in den meisten Orleans Anwendungen üblich sind. Es ist so konzipiert, dass es eigenständig und minimalistisch ist.

In diesem Lernprogramm fehlt die geeignete Fehlerbehandlung und anderer wesentlicher Code, der für eine Produktionsumgebung nützlich ist. Es sollte Ihnen jedoch helfen, ein praktisches Verständnis für die allgemeine Orleans App-Struktur zu gewinnen und Ihnen ermöglichen, sich auf die für Sie am relevantesten Teile zu konzentrieren.

Voraussetzungen

Projekteinrichtung

Erstellen Sie für dieses Lernprogramm vier Projekte als Teil derselben Lösung:

  • Bibliothek, die die Kornschnittstellen enthalten soll.
  • Bibliothek, die die Kornklassen enthalten soll.
  • Konsolen-App zum Hosten des Silos.
  • Konsolen-App zum Hosten des Clients.

Erstellen der Struktur in Visual Studio

Ersetzen Sie den Standardcode durch den für jedes Projekt bereitgestellten Code.

  1. Erstellen Sie zunächst ein Konsolen-App-Projekt in einer neuen Lösung. Rufen Sie das Projekt Silo auf, und benennen Sie die Projektmappe OrleansHelloWorld. Weitere Informationen zum Erstellen einer Konsolen-App finden Sie im Lernprogramm: Erstellen einer .NET-Konsolenanwendung mit Visual Studio.
  2. Fügen Sie ein weiteres Konsolen-App-Projekt hinzu, und nennen Sie es Client.
  3. Fügen Sie eine Klassenbibliothek hinzu, und nennen Sie sie GrainInterfaces. Informationen zum Erstellen einer Klassenbibliothek finden Sie im Lernprogramm: Erstellen einer .NET-Klassenbibliothek mit Visual Studio.
  4. Fügen Sie eine weitere Klassenbibliothek hinzu, und nennen Sie sie Grains.

Löschen von Standardquelldateien

  1. Löschen Sie Class1.cs aus Grains.
  2. Class1.cs aus GrainInterfaceslöschen.

Hinzufügen von Verweisen

  1. Grains verweist auf GrainInterfaces.
  2. Silo bezieht sich auf Getreide.
  3. Client verweist auf GrainInterfaces.

Hinzufügen von Orleans NuGet-Paketen

Projekt NuGet-Paket
Silo Microsoft.Orleans.Server
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Kunde Microsoft.Orleans.Client
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Hosting
Kornschnittstellen Microsoft.Orleans.Sdk
Körner Microsoft.Orleans.Sdk
Microsoft.Extensions.Logging.Abstractions

Microsoft.Orleans.Server, Microsoft.Orleans.Clientund Microsoft.Orleans.Sdk sind Metapackagen, die Abhängigkeiten enthalten, die Sie wahrscheinlich für silo und client benötigen. Weitere Informationen zum Hinzufügen von Paketverweisen finden Sie unter dotnet package add oder Pakete in Visual Studio installieren und verwalten mit dem NuGet-Paket-Manager.

Definieren einer Kornschnittstelle

Fügen Sie im Projekt GrainInterfaces eine IHello.cs Codedatei hinzu, und definieren Sie die folgende IHello Schnittstelle:

namespace GrainInterfaces;

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

Definieren einer Kornklasse

Fügen Sie im Grains-Projekt eine HelloGrain.cs Codedatei hinzu, und definieren Sie die folgende Klasse:

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

Erstellen des Silos

Um das Silo-Projekt zu erstellen, fügen Sie Code zum Initialisieren eines Servers hinzu, der die Getreide hostet und ausführt – ein Silo. Verwenden Sie den Localhost-Clustering-Provider, der es ermöglicht, alles lokal auszuführen, ohne von externen Speichersystemen abhängig zu sein. Weitere Informationen finden Sie unter Konfiguration für lokale Entwicklung. Führen Sie in diesem Beispiel einen Cluster mit einem einzigen Silo aus.

Fügen Sie den folgenden Code zum Program.cs des projekts Silo hinzu:

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

Der vorangehende Code:

Erstellen des Clients

Konfigurieren Sie schließlich einen Client für die Kommunikation mit den Getreiden, verbinden Sie ihn mit dem Cluster (mit einem einzigen Silo), und rufen Sie das Korn auf. Die Clusterkonfiguration muss mit dem für das Silo verwendeten übereinstimmen. Weitere Informationen finden Sie unter Cluster und 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();

Ausführen der Anwendung

Erstellen Sie die Projektmappe, und führen Sie das Silo aus. Führen Sie den Client aus, nachdem Sie die Bestätigungsmeldung erhalten haben, dass der Silo ausgeführt wird.

Um den Silo über die Befehlszeile zu starten, führen Sie den folgenden Befehl aus dem Verzeichnis aus, das die Silo-Projektdatei enthält:

dotnet run

Beim Starten des Silos werden zahlreiche Ergebnisse angezeigt. Nachdem die folgende Meldung angezeigt wurde, können Sie den Client ausführen:

Application started. Press Ctrl+C to shut down.

Führen Sie im Clientprojektverzeichnis denselben .NET CLI-Befehl in einem separaten Terminalfenster aus, um den Client zu starten:

dotnet run

Weitere Informationen zum Ausführen von .NET-Apps finden Sie unter dotnet run. Wenn Sie Visual Studio verwenden, können Sie mehrere Startprojekte konfigurieren.

Siehe auch