2016-06-23 2 views
1

J'ai implémenté un adaptateur de canal entrant pour interroger un répertoire. où nous pouvons recevoir plusieurs fichiers, à partir d'un autre processus entrant ... parmi ceux-ci, nous devons choisir des fichiers uniques à fusionner. nous avons implémenté un filtre personnalisé pour effectuer ce travail (pour obtenir des fichiers uniques et les transmettre à l'activateur de service).Impossible d'obtenir le numéro de fichier L'activateur de service va traiter - fichier l'adaptateur de canal entrant

Activateur de service, nous recevrons les fichiers un par un. et nous n'avons aucune idée du nombre de fichiers que nous avons reçu pour fusionner sur le sondage en cours à partir de la classe de filtre, il peut y avoir un seul fichier ou plus d'un fichier.

ma question est comment nous pouvons nous assurer que, combien de fichiers nous allons recevoir à la classe activateur de service. Afin que nous puissions exercer notre activité en fonction du nombre de fichiers que nous avons reçus de la classe Filter?

Y a-t-il un moyen de faire savoir à la classe Service Activator ... combien de fichiers seront reçus sur ce sondage à partir de la classe de filtre?

Répondre

0

Le <poller> a une option comme:

<xsd:attribute name="max-messages-per-poll" type="xsd:string"> 
     <xsd:annotation> 
      <xsd:documentation> 
       The maximum number of messages that will be produced for each poll. Defaults to 
       infinity (indicated by -1) for polling consumers, and 1 for polled 
       inbound channel adapters. 
      </xsd:documentation> 
     </xsd:annotation> 
    </xsd:attribute> 

Ainsi, ayant une valeur raisonnable il, vous limiterez votre service avec au-dessus. Si vous ne déplacez pas chaque message dans un fil séparé, vous pouvez simplement avoir un AtomicInteger dans votre service pour les compter. Et à la fin de la tâche d'interrogation, vous pouvez réinitialiser ce compteur pour qu'il soit prêt à calculer à nouveau lors du prochain sondage. À cet effet, vous pouvez utiliser AbstractMessageSourceAdvice avec son implémentation afterReceive() comme réinitialiser le compteur lorsque result == null.

Voir plus d'informations dans le Manuel de référence: http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#conditional-pollers

+0

Merci pour l'aide ... Artem – user2685868

+0

Heureux d'entendre! Cela signifie-t-il que vous pouvez déjà accepter la réponse? –

+0

En fait .. nous avons fait un autre moyen ... nous avons un filtre entre l'adaptateur de canal et la classe Activator ... donc nous venons d'introduire une classe POJO qui a la propriété, aucun filtre de fichiers a trouvé. Ensuite, nous lisons cette propriété de la classe activator. C'est tout !!. Mais merci pour votre suggestion, à l'avenir si c'est nécessaire je vais essayer de mettre en œuvre cela aussi bien. – user2685868