Teilen über


Konfiguration für lokale Entwicklung

Eine funktionierende Beispielanwendung, die auf Orleans 7.0 ausgerichtet ist, finden Sie unter Orleans: Hallo Welt. Im Beispiel werden der Client und der Silo in .NET-Konsolenanwendungen gehostet, die auf verschiedenen Plattformen funktionieren, während die Grains und Schnittstellen auf .NET Standard 2.0 ausgerichtet sind.

Tipp

Informationen zu älteren Versionen von Orleans finden Sie unter OrleansBeispielprojekte.

Silokonfiguration

Es wird empfohlen, das NuGet-Paket Microsoft.Extensions.Hosting zu verwenden, um das Silo zu konfigurieren und auszuführen. Außerdem benötigen Sie beim Entwickeln eines Orleans-Silos das NuGet-Paket Microsoft.Orleans.Server. Für die lokale Orleans-Siloentwicklung konfigurieren Sie das Localhost-Clustering, das für die Verwendung der Loopbackadresse konfiguriert ist. Um das Localhost-Clustering zu verwenden, rufen Sie die UseLocalhostClustering-Erweiterungsmethode auf. Betrachten Sie dieses Beispiel der Datei Program.cs des Silohosts:

using Microsoft.Extensions.Hosting;

await Host.CreateDefaultBuilder(args)
    .UseOrleans(siloBuilder =>
    {
        siloBuilder.UseLocalhostClustering();;
    })
    .RunConsoleAsync();

Der vorangehende Code:

  • Erstellt einen Standardhostgenerator.
  • Ruft die Erweiterungsmethode UseOrleans auf, um das Silo zu konfigurieren.
  • Ruft die Erweiterungsmethode UseLocalhostClustering für den angegebenen ISiloBuilder auf, um das Silo für die Verwendung von Localhost-Clustering zu konfigurieren.
  • Verkettet die RunConsoleAsync-Methode, um das Silo als Konsolenanwendung auszuführen.

Für die lokale Entwicklung sehen Sie sich das folgende Beispiel an, um zu erfahren, wie Sie ein Silo für diesen Fall konfigurieren. Es konfiguriert und startet ein Silo, das an der loopback-Adresse lauscht, wobei 11111 und 30000 entsprechend als Silo- und Gatewayports verwendet werden.

Fügen Sie dem Projekt das NuGet-Metapaket Microsoft.Orleans.Server hinzu.

dotnet add package Microsoft.Orleans.Server

Sie müssen ClusterOptions über die ISiloBuilderConfigure-Methode konfigurieren und dabei angeben, dass Sie LocalhostClustering als Ihre Wahl für das Clustering wünschen, wobei dieses Silo das primäre ist, und dann die Siloendpunkte konfigurieren.

Der ConfigureApplicationParts-Aufruf fügt die Assembly mit den Grainklassen explizit für das Setup der Anwendung hinzu. Er fügt auch jede referenzierte Assembly aufgrund der WithReferences-Erweiterung hinzu. Nach Abschluss dieser Schritte wird der Silohost erstellt und das Silo gestartet.

Sie können ein leeres Konsolenanwendungsprojekt erstellen, das auf .NET Framework 4.6.1 oder höher zum Hosten eines Silos und auf eine .NET-Konsolenanwendung ausgerichtet ist.

Im Folgenden finden Sie ein Beispiel für das Starten eines lokalen Silos:

try
{
    var host = await BuildAndStartSiloAsync();

    Console.WriteLine("Press Enter to terminate...");
    Console.ReadLine();

    await host.StopAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

static async Task<ISiloHost> BuildAndStartSiloAsync()
{
    var host = new HostBuilder()
      .UseOrleans(builder =>
      {
          builder.UseLocalhostClustering()
              .Configure<ClusterOptions>(options =>
              {
                  options.ClusterId = "dev";
                  options.ServiceId = "MyAwesomeService";
              })
              .Configure<EndpointOptions>(
                  options => options.AdvertisedIPAddress = IPAddress.Loopback)
              .ConfigureLogging(logging => logging.AddConsole());
      })
      .Build();

    await host.StartAsync();

    return host;
}

Clientkonfiguration

Es wird empfohlen, das NuGet-Paket Microsoft.Extensions.Hosting zu verwenden, um Clients (zusätzlich zum Silo) zu konfigurieren und auszuführen. Außerdem benötigen Sie das NuGet-Paket Microsoft.Orleans.Client. Um Localhost-Clustering auf dem verarbeitenden Client zu verwenden, rufen Sie die Erweiterungsmethode UseLocalhostClustering auf. Betrachten Sie dieses Beispiel der Datei Program.cs des Clienthosts:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args)
    .UseOrleansClient(client =>
    {
        client.UseLocalhostClustering();
    })
    .UseConsoleLifetime()
    .Build();

await host.StartAsync();

Der vorangehende Code:

  • Erstellt einen Standardhostgenerator.
  • Ruft die Erweiterungsmethode UseOrleansClient auf, um den Client zu konfigurieren.
  • Ruft die Erweiterungsmethode UseLocalhostClustering für den angegebenen IClientBuilder auf, um den Client für die Verwendung von Localhost-Clustering zu konfigurieren.
  • Ruft die Erweiterungsmethode UseConsoleLifetime auf, um den Client so zu konfigurieren, dass die Konsolenlebensdauer verwendet wird.
  • Ruft die StartAsync-Methode für die host-Variable auf, um den Client zu starten.

Für die lokale Entwicklung sehen Sie sich das folgende Beispiel an, um zu erfahren, wie Sie einen Client für diesen Fall konfigurieren. Er konfiguriert einen Client, der eine Verbindung mit einem loopback-Silo herstellen würde.

Fügen Sie dem Projekt das NuGet-Metapaket Microsoft.Orleans.Client hinzu. Nachdem Sie sich mit der API vertraut gemacht haben, können Sie genau die tatsächlich erforderlichen Pakete auswählen, die in Microsoft.Orleans.Client enthalten sind, und stattdessen auf sie verweisen.

Install-Package Microsoft.Orleans.Client

Sie müssen ClientBuilder mit einer Cluster-ID konfigurieren, die mit derjenigen übereinstimmt, die Sie für das lokale Silo angegeben haben, und statisches Clustering als Ihre Wahl für das Clustering angeben, indem Sie es auf den Gatewayport des Silos ausrichten.

Der ConfigureApplicationParts-Aufruf fügt die Assembly mit den Grainschnittstellen explizit für das Setup der Anwendung hinzu.

Nach Abschluss dieser Schritte können wir den Client und die Connect()-Methode erstellen, um eine Verbindung mit dem Cluster herzustellen.

Sie können ein leeres Konsolenanwendungsprojekt für .NET Framework 4.6.1 oder höher erstellen, um einen Client auszuführen, oder das Konsolenanwendungsprojekt wiederverwenden, das Sie für das Hosting eines Silos erstellt haben.

Im Folgenden finden Sie ein Beispiel dafür, wie ein Client eine Verbindung mit einem lokalen Silo herstellen kann:

var client = new ClientBuilder()
    .UseLocalhostClustering()
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "dev";
        options.ServiceId = "MyAwesomeService";
    })
    .ConfigureLogging(logging => logging.AddConsole())
var client = builder.Build();

await client.Connect();