scrutateur d'intégration de printemps vs répartiteur

J'essaye de configurer une application simple à l'aide de spring integration. L'objectif est de simplement utiliser un fichier entrant de l'adaptateur de canal pour surveiller un répertoire pour les nouveaux fichiers et les fichiers de processus comme ils sont ajoutés. Pour des raisons de simplicité, le traitement des fichiers au moment de est vous connectant simplement sur la sortie (nom du fichier en cours de traitement). Je tiens, toutefois, à traiter les dossiers multithread de la mode. Donc disons que 10 fichiers sont ramassés et doivent être traitées en parallèle et une fois terminé seulement alors nous passons à la prochaine 10 fichiers.

Pour cela, j'ai essayé deux approches différentes et les deux semblent fonctionner de la même façon et je voulais comprendre les différences entre l'utilisation poller ou répartiteur pour quelque chose comme ça.

Approche #1 - à l'Aide de poller

<int-file:inbound-channel-adapter id="filesIn" directory="in">
        <int:poller fixed-rate="1" task-executor="executor" />
</int-file:inbound-channel-adapter>

<int:service-activator ref="moveToStage" method="move" input-channel="filesIn" />

<task:executor id="executor" pool-size="5" queue-capacity="0" rejection-policy="DISCARD" />

Donc ici l'idée que je comprends, c'est que nous sommes constamment à l'interrogation de l'annuaire et dès qu'un fichier est reçu de son envoyé à filesIn canal jusqu'à la piscine de la limite est atteinte. Ensuite, jusqu'à ce que la piscine est occupé aucun des fichiers supplémentaires sont envoyés, même si im en supposant que le scrutin se poursuit encore à l'arrière-plan. Cela semble fonctionner, mais je ne suis pas sûr si vous utilisez le max de messages par sondage peut être utile ici de diminuer la fréquence d'interrogation. Par la mise en au max de messages par sondage, près de la piscine de taille.

Approche #2 - à l'Aide de répartiteur

<int-file:inbound-channel-adapter id="filesIn" directory="in">
    <int:poller fixed-rate="5000" max-messages-per-poll="3" />
</int-file:inbound-channel-adapter>

<int:bridge input-channel="filesIn" output-channel="filesReady" />

<int:channel id="filesReady">
    <int:dispatcher task-executor="executor"/>
</int:channel>

<int:service-activator ref="moveToStage" method="move" input-channel="filesInReady" />

<task:executor id="executor" pool-size="5" queue-capacity="0" rejection-policy="CALLER_RUNS" />

bon alors ici le poller n'est pas à l'aide de l'exécuteur testamentaire, donc je suis en supposant que son interrogation, de façon séquentielle. Tous les sondages 3 fichiers doit être ramassé et envoyé à filesReady canal qui utilise le répartiteur de passer les fichiers sur le service de l'activateur et parce qu'il utilise l'exécuteur testamentaire pour dispatcher il retourne immédiatement le contrôle et permet à l'filesIn canal pour envoyer plusieurs fichiers.

Je suppose que ma question est suis-je la compréhension de ces deux approches correctement et si l'une est meilleure que les autres.

Grâce

source d'informationauteur adeelmahmood