1

Je dois lire un fichier et diviser chaque ligne et groupe de lignes en fonction de la première colonne, lorsque la valeur de la première colonne change, je dois libérer le groupe précédent. Cela peut-il être fait dans l'intégration DSL de printemps?Spring Intégrateur d'intégration basé sur le contenu du message suivant

voici comment fichier ressemble, et c'est réglé:

x 1 
x 2 
x 3 
y 4 
y 5 
y 6 

La eteint devrait y avoir deux messages avec x = 1, 2, 3 et y = 4, 5, 6. Depuis ce doesn N'existe-t-il pas d'autre relation concernant le moment où le message doit être groupé? Puis-je grouper des messages dès que j'appuie sur un enregistrement non correspondant? Dans ce cas, alors que je tape "y" à la ligne numéro 4, grouper les messages "x" précédents et le relâcher? Est-il possible d'utiliser un agrégateur personnalisé?

Répondre

0

La solution la plus simple est de s'appuyer sur le groupTimeout() dans la mesure où vous vous séparez et regroupez en un seul fil et assez rapidement. Ainsi, tous vos enregistrements seront traités et distribués à leurs groupes. Mais puisque nous ne savons pas comment les libérer, nous comptons sur un délai d'attente prévu. Ainsi, la configuration pour l'agrégateur serait comme ceci:

.aggregate(a -> a 
      .correlationExpression("payload.column1") 
      .releaseStrategy(g -> false) 
      .groupTimeout(1000) 
      .sendPartialResultOnExpiry(true) 
      .outputProcessor(g -> { 
       Collection<Message<?>> messages = g.getMessages(); 

       // iterate and build your output payload         

       }) 
      ) 
+0

merci pour la réponse. Je vais essayer. –

+0

Pendant ce temps, est-ce que je peux utiliser poller pour lire le fichier, mais au lieu de flux d'intégration, utilisez la méthode personnalisée pour lire ligne par ligne et le grouper et émettre comme un message? –

+0

Oui, vous pouvez le faire en utilisant '.handle()' qui appelle votre méthode personnalisée pour l'analyse de fichiers –