Partager via


Configuration du développement local

Pour obtenir un exemple d’application qui cible Orleans 7.0, consultez Orleans : Hello World. Cet exemple héberge le client et le silo dans des applications console .NET qui fonctionnent sur différentes plateformes, tandis que les grains et les interfaces ciblent .NET Standard 2.0.

Conseil

Pour les versions antérieures d’Orleans, consultez Exemples de projets Orleans.

Configuration du silo

Il est recommandé d’utiliser le package NuGet Microsoft.Extensions.Hosting pour configurer et exécuter le silo. En outre, pour le développement d’un silo Orleans, vous avez besoin du package NuGet Microsoft.Orleans.Server. Pour développer un silo Orleans local, vous configurez le clustering localhost, qui est configuré pour utiliser l’adresse de bouclage. Pour utiliser le clustering localhost, appelez la méthode d’extension UseLocalhostClustering. Prenons l’exemple du fichier Program.cs de l’hôte du silo :

using Microsoft.Extensions.Hosting;

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

Le code précédent :

  • Crée un générateur d’hôte par défaut.
  • Appelle la méthode d’extension UseOrleans pour configurer le silo.
  • Appelle la méthode d’extension UseLocalhostClustering sur le ISiloBuilder donné pour configurer le silo afin qu’il utilise le clustering localhost.
  • Chaîne la méthode RunConsoleAsync pour exécuter le silo en tant qu’application console.

Pour le développement local, reportez-vous à l’exemple ci-dessous sur la manière de configurer un silo pour ce cas. Il configure et démarre un silo à l’écoute sur l’adresse loopback, avec 11111 et 30000 en tant que ports de silo et de passerelle respectivement.

Ajoutez le méta-package NuGet Microsoft.Orleans.Server au projet.

dotnet add package Microsoft.Orleans.Server

Vous devez configurer ClusterOptions via la méthode Configure ISiloBuilder, spécifier que vous souhaitez LocalhostClustering pour le clustering (avec ce silo comme principal), avant de configurer les points de terminaison du silo.

L’appel ConfigureApplicationParts ajoute explicitement l’assembly avec les classes de grain à la configuration de l’application. Il ajoute également tout assembly référencé en raison de l’extension WithReferences. Une fois ces étapes terminées, l’hôte de silo est généré et le silo est démarré.

Vous pouvez créer un projet d’application console vide ciblant .NET Framework 4.6.1 ou une version ultérieure pour héberger un silo, et une application console .NET.

Voici un exemple de la manière dont un silo local peut être démarré :

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;
}

Configuration de client

Il est recommandé d’utiliser le package NuGet Microsoft.Extensions.Hosting pour configurer et exécuter les clients (en plus du silo). Vous avez également besoin du package NuGet Microsoft.Orleans.Client. Pour utiliser le clustering localhost sur le client consommateur, appelez la méthode d’extension UseLocalhostClustering. Prenons l’exemple du fichier Program.cs de l’hôte du client :

using Microsoft.Extensions.Hosting;

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

await host.StartAsync();

Le code précédent :

  • Crée un générateur d’hôte par défaut.
  • Appelle la méthode d’extension UseOrleansClient pour configurer le client.
  • Appelle la méthode d’extension UseLocalhostClustering sur le IClientBuilder donné pour configurer le client afin qu’il utilise le clustering localhost.
  • Appelle la méthode d’extension UseConsoleLifetime pour configurer le client afin qu’il utilise la durée de vie de la console.
  • Appelle la méthode StartAsync sur la variable host pour démarrer le client.

Pour le développement local, reportez-vous à l’exemple ci-dessous sur la manière de configurer un client pour ce cas. Il configure un client qui se connecterait à un silo loopback.

Ajoutez le méta-package NuGet Microsoft.Orleans.Client au projet. Une fois que vous êtes à l’aise avec l’API, vous pouvez choisir les packages exacts inclus dans Microsoft.Orleans.Client dont vous avez effectivement besoin, et les référencer à la place.

Install-Package Microsoft.Orleans.Client

Vous devez configurer ClientBuilder avec un ID de cluster qui correspond à celui que vous avez spécifié pour le silo local et spécifier le clustering statique comme choix de clustering, en le pointant vers le port de passerelle du silo

L’appel ConfigureApplicationParts ajoute explicitement l’assembly avec les interfaces de grain à la configuration de l’application.

Une fois ces étapes terminées, nous pouvons générer le client et la méthode Connect() sur celui-ci pour se connecter au cluster.

Vous pouvez créer un projet d’application console vide ciblant .NET Framework 4.6.1 ou une version ultérieure pour exécuter un client, ou réutiliser le projet d’application console que vous avez créé pour héberger un silo.

Voici un exemple de la manière dont un client peut se connecter à un silo local :

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