Question

Je souhaite créer une application Azure comportant deux rôles de travail et AUCUN rôle Web. Lorsque les rôles de travail démarrent pour la première fois, je souhaite que SEUL UN DES rôles effectue les opérations suivantes en une seule fois:

  • Téléchargez et analysez un fichier maître, puis mettez en file d'attente plusieurs "quot" enfant " tâches basées sur la contenu du fichier maître
  • Mettre en file d'attente le téléchargement d'un fichier maître unique " enfant " tâche à exécuter le lendemain

Chacun des " enfants " les tâches seraient ensuite effectuées par les deux travailleurs jusqu'à épuisement de la file d'attente. Pensez aux choses entières comme "amorçant la pompe"

Ce genre de chose est vraiment facile si j'ajoute le premier " maître " tâche manuellement dans une file d'attente en appelant un rôle Web, mais cela semble très difficile à faire en mode de démarrage automatique.

Toute aide à cet égard serait grandement appréciée!

Merci .....

Était-ce utile?

La solution

Une possibilité: au lieu d’appeler un rôle Web, chargez simplement la file d’attente. (Il semble que ce soit le type d'application que vous souhaitez créer automatiquement pour travailler puis qui se ferme à nouveau. Si vous automatisez cela, il devrait être trivial d'automatiser également le chargement de la file d'attente.)

Une (peut-être) meilleure option: utilisez une sorte de mécanisme de verrouillage pour vous assurer que l'initialisation ne fonctionne que par une seule instance de travail. Une façon de faire est d'essayer de créer la file d'attente (ou un blob ou une entité dans une table). S'il existe déjà, l'autre instance gère l'initialisation. Si la création réussit, alors c'est le travail de cette instance.

Notez qu'il est toujours préférable d'utiliser un bail plutôt qu'un verrou, au cas où l'instance qui effectue l'initialisation échoue. Pensez à utiliser un délai d'expiration (par exemple, en stockant un horodatage dans un stockage de table ou dans les métadonnées de l'objet blob ou dans le nom de la file d'attente ...).

Autres conseils

Nous nous sommes retrouvés avec exactement le même type de problème, c'est pourquoi nous avons introduit un Mappeur O / C (objet en nuage). En gros, vous souhaitez introduire deux types de services cloud:

  1. QueueService qui consomme des messages chaque fois que disponible.
  2. ScheduledService qui déclenche des opérations sur une base programmée.

Ensuite, comme d'autres l'ont suggéré, dans le nuage, vous préférez utiliser des baux plutôt que des verrous, afin d'éviter que votre application de cloud ne soit bloquée à jamais en raison d'un matériel (infrastructure ou infrastructure temporaire). ) numéro.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top