Aplicación de Orleans
Una aplicación típica de Orleans consta de un clúster de procesos de servidor (silos) donde residen granos y un conjunto de procesos cliente, normalmente servidores web, que reciben solicitudes externas, las convierten en llamadas a métodos de grano y devuelven resultados. Por lo tanto, lo primero que hay que hacer para ejecutar una aplicación de Orleans es iniciar un clúster de silos. Con fines de prueba, un clúster puede constar de un único silo. Para una implementación de producción confiable, conviene tener más de un silo en un clúster para disponer de mayor tolerancia a errores y escala.
Una vez que el clúster se está ejecutando, se puede iniciar uno o varios procesos de cliente que se conectan al clúster y pueden enviar solicitudes a los granos. Los clientes se conectan a un punto de conexión TCP especial en los silos: la puerta de enlace. De forma predeterminada, cada silo de un clúster tiene habilitada una puerta de enlace de cliente. Por lo tanto, los clientes pueden conectarse a todos los silos en paralelo para mejorar el rendimiento y la resistencia.
Configuración e inicio de un silo
Un silo se configura mediante programación con un objeto ClusterConfiguration. Se puede crear una instancia de él y rellenarse directamente, cargar la configuración desde un archivo o crear con varios métodos auxiliares disponibles para diferentes entornos de implementación. Para las pruebas locales, la manera más fácil consiste en usar el método auxiliar LocalhostPrimarySilo. Después, el objeto de configuración se pasa a una nueva instancia de la clase SiloHost, que se puede inicializar a continuación.
Puede crear un proyecto de aplicación de consola vacío con .NET Framework 4.6.1 o superior como destino para hospedar un silo.
Agregue el metapaquete NuGet Microsoft.Orleans.Server
al proyecto.
Install-Package Microsoft.Orleans.Server
Este es un ejemplo de cómo se puede iniciar un silo local:
var siloConfig = ClusterConfiguration.LocalhostPrimarySilo();
var silo = new SiloHost("Test Silo", siloConfig);
silo.InitializeOrleansSilo();
silo.StartOrleansSilo();
Console.WriteLine("Press Enter to close.");
// wait here
Console.ReadLine();
// shut the silo down after we are done.
silo.ShutdownOrleansSilo();
Configuración y conexión a un cliente
El cliente para conectarse a un clúster de silos y enviar solicitudes a granos se configura mediante programación con un objeto ClientConfiguration y ClientBuilder. Se puede crear una instancia del objeto ClientConfiguration
y rellenarse directamente, cargar la configuración desde un archivo o crear con varios métodos auxiliares disponibles para diferentes entornos de implementación. Para las pruebas locales, la manera más fácil consiste en usar el método auxiliar LocalhostSilo. Después, el objeto de configuración se pasa a una nueva instancia de la clase ClientBuilder
.
ClientBuilder
expone más métodos para configurar características de cliente adicionales. Después, se llama al método ClientBuilder.Build() del objeto ClientBuilder
para obtener una implementación de la interfaz IClusterClient. Por último, se llama al método IClusterClient.Connect() en el objeto devuelto 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. Agregue el metapaquete NuGet Microsoft.Orleans.Client
al proyecto.
Install-Package Microsoft.Orleans.Client
Este es un ejemplo de cómo se puede conectar un cliente a un silo local:
var config = ClientConfiguration.LocalhostSilo();
var builder = new ClientBuilder().UseConfiguration(config).
var client = builder.Build();
await client.Connect();
Configuraciones de producción
Los ejemplos de configuración que usamos aquí son para probar silos y clientes que se ejecutan en el mismo equipo que localhost
. En producción, los silos y los clientes normalmente se ejecutan en servidores diferentes y se configuran con una de las opciones de configuración de clúster confiables. Encontrará más información al respecto en la guía de configuración y en la descripción de la administración de clústeres.