Share via


Configuración de desarrollo local

Si necesita una aplicación de ejemplo que funcione con Orleans 7.0, consulte : Hola mundoOrleans. El ejemplo hospeda el cliente y el silo en las aplicaciones de consola de .NET que funcionan en distintas plataformas, mientras que los granos e interfaces se dirigen a .NET Standard 2.0.

Sugerencia

Para información sobre versiones anteriores de Orleans, consulte Proyectos de ejemplo de Orleans.

Configuración del silo

Se recomienda usar el paquete NuGet Microsoft.Extensions.Hosting para configurar y ejecutar el silo. Además, al desarrollar un silo de Orleans, necesita el paquete NuGet Microsoft.Orleans.Server. Para el desarrollo del silo local de Orleans, configure la agrupación en clústeres de localhost, que está configurado para usar la dirección de bucle invertido. Para usar la agrupación en clústeres de localhost, llame al método de extensión UseLocalhostClustering. Tenga en cuenta este archivo Program.cs de ejemplo del host del silo:

using Microsoft.Extensions.Hosting;

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

El código anterior:

  • Crea un generador de hosts predeterminado.
  • Llama al método de extensión UseOrleans para configurar el silo.
  • Llama al método de extensión UseLocalhostClustering en el elemento ISiloBuilder especificado para configurar el silo a fin de usar la agrupación en clústeres de localhost.
  • Encadena el método RunConsoleAsync para ejecutar el silo como una aplicación de consola.

Para el desarrollo local, consulte el ejemplo siguiente sobre cómo configurar un silo para ese caso. Configura e inicia un silo que escucha en la dirección loopback, con 11111 y 30000 como puertos de silo y de puerta de enlace respectivamente.

Agregue el metapaquete NuGet Microsoft.Orleans.Server al proyecto.

dotnet add package Microsoft.Orleans.Server

Debe configurar ClusterOptions a través del método ISiloBuilderConfigure, especificar que desea LocalhostClustering como opción de agrupación en clústeres con este silo como principal y, a continuación, configurar los puntos de conexión de silo.

La llamada a ConfigureApplicationParts agrega explícitamente el ensamblado con clases de grano a la configuración de la aplicación. También agrega cualquier ensamblado de referencia que se deba a la extensión WithReferences. Una vez completados estos pasos, se compila el host de silo y se inicia.

Puede crear un proyecto de aplicación de consola vacío destinado a .NET Framework 4.6.1, o versiones posteriores, para que hospede un silo, y una aplicación de consola de .NET.

Este es un ejemplo de cómo se puede iniciar un silo local:

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

Configuración de cliente

Se recomienda usar el paquete NuGet Microsoft.Extensions.Hosting para configurar y ejecutar clientes (además del silo). También necesita el paquete NuGet Microsoft.Orleans.Client. Para usar la agrupación en clústeres de localhost en el cliente de consumo, llame al método de extensión UseLocalhostClustering. Tenga en cuenta este archivo Program.cs de ejemplo del host del cliente:

using Microsoft.Extensions.Hosting;

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

await host.StartAsync();

El código anterior:

  • Crea un generador de hosts predeterminado.
  • Llama al método de extensión UseOrleansClient para configurar el cliente.
  • Llama al método de extensión UseLocalhostClustering en el elemento IClientBuilder especificado para configurar el cliente a fin de usar la agrupación en clústeres de localhost.
  • Llama al método de extensión UseConsoleLifetime para configurar el cliente a fin de que use la duración de la consola.
  • Llama al método StartAsync en la variable host para iniciar el cliente.

Para el desarrollo local, consulte el ejemplo siguiente sobre cómo configurar un cliente para ese caso. En el se configura un cliente que se va a conectar a un silo loopback.

Agregue el metapaquete NuGet Microsoft.Orleans.Client al proyecto. Después de familiarizarse con la API, puede elegir qué paquetes exactos incluidos en Microsoft.Orleans.Client necesita realmente y hacer referencia a ellos en su lugar.

Install-Package Microsoft.Orleans.Client

Debe configurar ClientBuilder con un identificador de clúster que coincida con el especificado para el silo local y especificar la agrupación en clústeres estática como la opción de agrupación en clústeres que apunte al puerto de la puerta de enlace del silo.

La llamada a ConfigureApplicationParts agrega explícitamente el ensamblado con interfaces de grano a la configuración de la aplicación.

Una vez completados estos pasos, podemos compilar el cliente y el método Connect() en él para conectarse al clúster.

Puede crear un proyecto de aplicación de consola vacío con .NET Framework 4.6.1 o posterior como destino para ejecutar un cliente o reutilizar el proyecto de aplicación de consola que creó para hospedar un silo.

Este es un ejemplo de cómo se puede conectar un cliente a 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();