J'ai un service Windows écrit en C# qui surveille un dossier pour les fichiers à traiter. Lorsque des fichiers sont ajoutés à ce dossier, le service doit ramasser le fichier et effectuer une tâche avec lui, en consommant le fichier dans le processus.Stratégies d'accès aux fichiers distribués
Je voudrais distribuer le travail sur plusieurs serveurs physiques pour la tolérance aux pannes. Les fichiers seront placés sur le NAS accessible à toutes les instances de service.
L'exigence importante est que je voudrais que chaque service prenne un dossier exclusivement; un fichier ne doit pas être traité par plusieurs services.
Y a-t-il de bonnes stratégies pour travailler avec des fichiers de cette manière?
J'aime le son de cette approche, mais comment gérer un processus se terminant brusquement et laisser un fichier '.lock' présent? (En supposant que le travail inachevé peut être repris en toute sécurité) –
C'est toujours un problème; une approche consiste à écrire une logique de "l'expiration". Autrement dit, le processus qui gère le fichier peut continuer à mettre à jour l'horodatage du fichier '.lock' ou vous pouvez placer un horodatage _in_ dans le fichier' .lock'. Ensuite, d'autres processus pourraient détecter, basé sur le fait que l'horodatage n'a pas changé en 5 minutes (juste un exemple), et "prendre en charge" ce fichier de verrouillage. – CodingGorilla
Keep-alives sur le fichier '.lock' rend cette solution assez bonne pour moi. –