2008-12-10 18 views
1

J'ai essayé de trouver des informations à ce sujet, mais en raison de l'immaturité du cadre d'intégration de printemps, je n'ai pas eu beaucoup de chance.Spring Integration 1.0 RC2: Contenu du fichier en streaming?

Voici mon flux de travail souhaité:

  1. Les nouveaux fichiers sont placés dans un répertoire « entrant »

  2. Les fichiers sont pris à l'aide d'un fichier: entrant-canal adaptateur

  3. Le contenu du fichier est diffusé, N lignes à la fois, à un canal «Étape 1», qui analyse la ligne en une représentation intermédiaire (partagée).

  4. Cette ligne analysée est acheminée vers plusieurs canaux «Étape 2». Chaque canal 'Stage 2' fait son propre traitement sur les N lignes disponibles pour les convertir en une représentation finale. Ce canal doit avoir une file d'attente qui garantit qu'aucun canal de niveau 2 ne soit dépassé dans le cas où un canal est significativement plus lent que les autres.

  5. La représentation finale des N lignes est écrite dans un fichier. Il y aura autant de fichiers de sortie car il y avait des destinations de routage à l'étape 4.

** « N » est au-dessus pour un nombre raisonnable de lignes à lire à la fois, de [1, tout ce que je peux adapter en mémoire raisonnablement], mais est toujours garanti être inférieur au nombre de lignes dans le fichier complet. *

Comment puis-je accomplir streaming (étapes 3, 4, 5) dans Spring Integration? Il est assez facile de ne pas diffuser les fichiers, mais mes fichiers sont assez volumineux pour que je ne puisse pas lire tout le fichier en mémoire. En parallèle, j'ai une implémentation fonctionnelle de ce flux de travail sans Spring Integration, mais puisque nous utilisons Spring Integration dans d'autres endroits de notre projet, je voudrais l'essayer ici pour voir comment ça fonctionne et comment le code résultant se compare pour la longueur et la clarté.

Répondre

1

Ceci est un cas d'utilisation très intéressant que je suis désolé d'avoir manqué depuis si longtemps. Cela vaut vraiment la peine de créer un problème pour. En ce moment nous avons le support dans Spring Integration pour ramasser les fichiers et leur envoyer références à eux autour. Il y a aussi un support rudimentaire pour convertir les fichiers en byte [] ou en String.

La réponse est que maintenant vous feriez l'étape 2 en code java personnalisé, envoyant les morceaux à un canal Stage 2. Je recommanderais de ne pas envoyer de références à des flux en tant que charges utiles de messages.