> Tech > Gérer les fonctionnalités communes

Gérer les fonctionnalités communes

Tech - Par Renaud ROSSET - Publié le 24 mars 2011
email


L’objectif de la modification de cette classe consiste à séparer les parties spécifiques au rôle Worker du code utilisable dans n’importe quel rôle Worker. Pour faciliter son intégration dans n’importe quelle application Azure, vous pouvez concevoir l’API au moyen de méthodes d’extension sur la classe Microsoft.ServiceHosting.Service Run

Gérer les fonctionnalités communes

time.RoleEntryPoint. La première étape consiste à créer une méthode capable de gérer les fonctionnalités communes dans votre méthode Start(). Les actions communes vont rester en sommeil pendant un certain temps, elles vont s’exécuter, puis elles vont déterminer si vous continuez à traiter des requêtes. Cette fonctionnalité est facile à représenter au moyen de la méthode d’extension suivante :

public static void RunWorker(
this RoleEntryPoint role,
TimeSpan sleepTime,
Func method)
{
do
{
Thread.Sleep(sleepTime);
} while (method());
}

Ensuite, vous devez examiner les actions effectuées à chaque étape. Ce rôle Worker effectue son travail en utilisant les éléments présents dans la table Azure Storage. Il s’agit d’un schéma commun: exécuter des requêtes sur une table Azure, traiter certains éléments, puis enregistrer les modifications dans la table en question. Cela correspond à une autre méthode d’extension utile. Les éléments de table Azure sont accessibles via un contexte de service sous la forme IQueryTable pou un certain T. Une méthode d’extension consistant à effectuer certaines actions sur des éléments dans une table, puis à enregistrer ces modifications prend la forme suivante :

public static void ProcessTableData(
this IQueryable sequence,
Action action,
TableStorageDataServiceContext context)
{
sequence.ForAll(action);
context.SaveChanges();
}
public static void ForAll(this IQueryable
sequence, Action action)
{
foreach (T item in sequence)
action(item);
}

ForAll est une méthode d’aide qui fournit une interface simple permettant d’agir sur tous les éléments dans une séquence. ProcessTableData n’est pas une méthode aussi compliquée qu’il n’y paraît, car vous pouvez construire votre requête dans le code appelant. N’importe quel code LINQ fonctionnera pour filtrer la table (where, take, skip, orderby ou n’importe quelle autre méthode LINQ). En fait, c’est ce que j’effectue dans ma méthode Start(). La méthode Start() réusinée a l’aspect suivant :

public override void Start()
{
RoleManager.WriteToLog("Information",
"Worker Process entry point called");
StorageAccountInfo accountInfo =
StorageAccountInfo.GetAccountInfoFromConfiguration(
"TableStorageEndpoint");
LinkDataServiceContext context =
new LinkDataServiceContext(accountInfo);
this.RunWorker(TimeSpan.FromSeconds(30), () =>
{
RoleManager.WriteToLog("Information",
"Checking Link Database");
context.WebLinkDataCollection.
Where((link) =>
(!link.LinkValid) || DateTime.Now –
link.LastVisit >
TimeSpan.FromDays(1)).
ProcessTableData((item) =>
CheckLink(item), context);
return true;
});
}

L’autre schéma commun pour un rôle Worker consiste à récupérer les messages d’une file d’attente et à traiter chacun d’eux. Voici un exemple de code Azure correspondant :

// retrieve messages and write them to the
//development fabric log
while (true)
{
Thread.Sleep(10000);
if (queue.DoesQueueExist())
{
Message msg = queue.GetMessage();
if (msg != null)
{
RoleManager.WriteToLog("Information",
string.Format(
"Message '{0}' processed.",
msg.ContentAsString()));
queue.DeleteMessage(msg);
}
}
}

Téléchargez cette ressource

Guide de Sécurité IA et IoT

Guide de Sécurité IA et IoT

Compte tenu de l'ampleur des changements que l'IA est susceptible d'entraîner, les organisations doivent élaborer une stratégie pour se préparer à adopter et à sécuriser l'IA. Découvrez dans ce Livre blanc Kaspersky quatre stratégies efficaces pour sécuriser l'IA et l'IoT.

Tech - Par Renaud ROSSET - Publié le 24 mars 2011