Considérons un rôle de travailleur que:arrêt progressif du rôle des travailleurs Azure
- héberge un serveur WCF
- Ecoutes à quelques files d'attente Azure Queues de stockage et de bus
Les méthodes de traitement effectuent certains E/S de stockage Azure, HttpClient
appels à des API externes et des appels Entity Framework. Maintenant, je veux que mon rôle de travailleur gracieusement l'arrêt si toutes les opérations en cours sont terminées ou annulées de manière gérée:
- Arrêtez d'accepter toutes les demandes entrantes une fois
RoleEntryPoint.OnStop()
est déclenchée. Est-ce que Azure le fait pour moi? Sinon, comment puis-je l'appliquer? - Allow
N
secondes pour toute opération en attente pour compléter - Après
N
secondes annule toute opération de gauche. L'annulation ne doit pas dépasserM
secondes de sorte queN + M < 5 minutes
. Je crois que 5 minutes est un temps garanti Azure Runtime attendra après qu'il a déclenchéOnStop()
et avant qu'il ne termine le processus.
J'imager quelque chose comme ceci:
public override void Run() {
// create a cancellation token source
try {
// pass the token to all processing/listening routines
}
catch (Exception e) { }
}
public override void OnStop() {
try {
// trigger the cancellation token source
}
catch (Exception e) { }
}
L'échantillon naïf ci-dessus suppose que toutes mes routines de traitement sont async haut en bas (aux appels EF/HttpClient). Si c'est le chemin à parcourir, j'ai besoin d'un exemple de travail qui prenne en charge les conditions préalables (hôte WCF, écouteurs de file d'attente).
Les questions ouvertes:
- Comment puis-je faire une demande de TCP plus sûr entrants sont envoyés à mon rôle de travailleur après
OnStop()
est déclenché? Ceci est important pour adapter le code d'arrêt à une limite de 5 minutes. - Comment trouver des chiffres concrets pour
N
etM
en tenant compte de tous les éléments comme les temporisations de canal WCF, les délais d'attente EF, etc. dans le fichier de configuration? - Sera-t-il encore possible pour le code synchrone?
Je voudrais essayer de créer un singletone (statique ou dépend du conteneur di) avec un drapeau qui est vrai lorsque l'arrêt est en attente. Cela devrait suffire pour le client de file d'attente de stockage azure. Comme pour les autres wcf et bus de service je ne suis pas sûr :(mais afaik vous devriez être en mesure de fermer l'écouteur – lag
Et pour résoudre le problème de délai d'attente à la place du drapeau booléen j'utiliserais une date pour vérifier si la consommation de messages devrait être arrêtée – lag