2010-04-01 5 views
0

Entrée serveur - fichiers de type jpg, TIF, cru, .png, mov arrivent via FTPEssayer de déterminer la meilleure conception pour ce flux de travail - C# - 3.0

Chaque fichier doit être filigrané, le cas échéant, et méta données ajoutées au fichier

Ensuite, chaque fichier doit être déplacé vers un répertoire de commandes où un fichier de commande est généré, puis emballé sous forme de fichier zip et déplacé vers le serveur de traitement.

Les noms de fichier sont [orderid_userid_guid]. [Jpg | TIF | mov | .png ...]

Comme je l'attends le volume de croître, je ne veux pas travailler sur un fichier à la fois et déplacez à travers le flux de travail. Je préférerais multi-thread/asynchrone si possible.

Répondre

1

Je pourrais installer un système de file d'attente de message et de traitement pour ceci.

Un processus/thread/services surveilleront le serveur FTP, et lorsque de nouveaux fichiers apparaissent, vont les saisir et de les jeter dans une file d'attente (éventuellement MSMQ, ou tout simplement un dossier de mise en scène, etc.)

Un autre processus surveille cette file d'attente, et quand un fichier apparaît, il l'attrape et fait filigraner/metadata/etc., puis le dépose dans une autre file d'attente/dossier.

Un autre processus surveille cette file d'attente et récupère les nouveaux fichiers à compresser. Après zipping, déposer dans une autre file d'attente.

... et ainsi de suite.

Vous pouvez configurer des "répartiteurs de travail" à la fin de chaque file d'attente pour récupérer des fichiers et les envoyer à autant de threads de production que vous le souhaitez.

Vous n'êtes pas obligé de le découper en plusieurs processus et files d'attente distincts - c'est à vous de décider. Les "files d'attente" peuvent également être mises en œuvre de différentes manières. Vous pouvez commencer par MSMQ, mais vous pouvez également envisager de simplement déplacer des fichiers entre des dossiers, etc. WCF et Windows Workflow Foundation peuvent être de bonnes technologies à regarder en premier.

+0

Andy, Si mon volume est grand puis-je obtenir des performances de traitement peut fichiers à la fois pour une étape particulière. Par exemple, puis-je déplacer 100 fichiers vers un Q qui est pour le filigrane et tel que l'auditeur de ce Q travaille sur autant de fichiers qu'il le peut à n'importe quel point? – ltech

+0

Je créerais probablement un pool de threads de "threads de travail" et un autre thread pour agir en tant que listener/dispatcher. Le thread Dispatcher récupérer un seul fichier, puis le remettre à un thread de travail à traiter. Lorsque le travail est terminé, il met le fichier dans la file d'attente suivante, puis revient dans un état d'attente dans le pool de threads pour attendre l'élément suivant. Le travail du répartiteur consiste à surveiller le fichier "file d'attente/dossier", et la main des fichiers individuels aux threads de travail. WCF peut réellement faire tout cela pour vous assez facilement. –

+0

Andy, pouvez-vous élaborer sur la WCF ou pointer vers une référence? – ltech