Application Orleans
Une application Orleans typique se compose d’un cluster de processus serveur (silos) contenant les grains, et d’un ensemble de processus client, généralement des serveurs web, qui reçoivent des demandes externes, les transforment en appels de méthode de grain et retournent des résultats. Ainsi, la première chose à faire pour exécuter une application Orleans est de démarrer un cluster de silos. À des fins de test, un cluster peut être composé d’un seul silo. Pour bénéficier d’un déploiement en production fiable, nous voulons plus d’un silo dans un cluster, afin d’assurer la mise à l’échelle et la tolérance de panne.
Une fois le cluster en cours d’exécution, nous pouvons démarrer un ou plusieurs processus client qui se connectent au cluster et peuvent envoyer des demandes aux grains. Les clients se connectent à un point de terminaison TCP spécial sur les silos, la passerelle. Par défaut, chaque silo d’un cluster dispose d’une passerelle cliente activée. Ainsi, les clients peuvent se connecter à tous les silos en parallèle pour améliorer les performances et la résilience.
Un silo est configuré programmatiquement via un objet ClusterConfiguration. Il peut être instancié et rempli directement, charger des paramètres à partir d’un fichier ou être créé avec plusieurs méthodes d’assistance disponibles pour différents environnements de déploiement. Pour les tests locaux, le moyen le plus simple consiste à utiliser la méthode d’assistance LocalhostPrimarySilo. L’objet de configuration est ensuite transmis à une nouvelle instance de la classe SiloHost, qui peut être initialisée et démarrée après cela.
Vous pouvez créer un projet d’application console vide ciblant .NET Framework 4.6.1 ou version ultérieure pour héberger un silo.
Ajoutez le métapackage NuGet Microsoft.Orleans.Server
au projet.
Install-Package Microsoft.Orleans.Server
Voici un exemple de la manière de démarrer 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();
Le client pour la connexion à un cluster de silos et pour l’envoi de demandes aux grains est configuré programmatiquement via un objet ClientConfiguration et ClientBuilder. L’objet ClientConfiguration
peut être instancié et rempli directement, charger des paramètres à partir d’un fichier ou être créé avec plusieurs méthodes d’assistance disponibles pour différents environnements de déploiement. Pour les tests locaux, le moyen le plus simple consiste à utiliser la méthode d’assistance LocalhostSilo. L’objet de configuration est ensuite transmis à une nouvelle instance de la classe ClientBuilder
.
ClientBuilder
expose d’autres méthodes pour configurer des fonctionnalités client supplémentaires. Après cela, la méthode ClientBuilder.Build() de l’objet ClientBuilder
est appelée pour obtenir une implémentation de l’interface IClusterClient. Enfin, nous appelons la méthode IClusterClient.Connect() sur l’objet retourné pour nous 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. Ajoutez le métapackage NuGet Microsoft.Orleans.Client
au projet.
Install-Package Microsoft.Orleans.Client
Voici un exemple de la manière dont un client peut se connecter à un silo local :
var config = ClientConfiguration.LocalhostSilo();
var builder = new ClientBuilder().UseConfiguration(config).
var client = builder.Build();
await client.Connect();
Les exemples de configuration que nous avons utilisés ici servent à tester les silos et les clients s’exécutant sur le même ordinateur que localhost
. En production, les silos et les clients s’exécutent généralement sur différents serveurs et sont configurés avec l’une des options de configuration de cluster fiables. Vous trouverez plus d’informations à ce sujet dans le Guide de configuration et dans la description de la gestion des clusters.