2017-05-25 2 views
1

J'utilise le séparateur pour diviser les messages et les transmettre aux autres canaux respectifs pour traitement ultérieur. Mais je voulais envoyer la sortie du séparateur à un canal qui l'écrira dans un autre fichier. Également voulu envoyer la sortie du séparateur à un autre canal qui effectuera une tâche.Sortie du répartiteur de ressort sur plusieurs canaux

Je suis capable de faire la même chose en utilisant ce qui suit, mais cela ne semble pas fonctionner si je n'ai pas réussi à traiter l'un quelconque des enregistrements séparés dans channel2. Il arrête le processus et n'écrit pas les enregistrements restants dans channel1.

<int:splitter input-channel="inputchannel" ref="splitter" method="doSplit" output-channel="routingChannel"/> 

    <int-recipient-list-router id="customRouter" input-channel="routingChannel" 
     <int:recipient channel="channel1"/> <!--Write to file--> 
     <int:recipient channel="channel2"/> <!-- logic to process --> 
    </int:reciepient-list-router> 

Y a-t-il un autre moyen de le faire passer aux canaux séparés indépendamment?

Répondre

1

Le recipient-list-router a une option comme:

/** 
* Specify whether send failures for one or more of the recipients should be ignored. By default this is 
* <code>false</code> meaning that an Exception will be thrown whenever a send fails. To override this and suppress 
* Exceptions, set the value to <code>true</code>. 
* @param ignoreSendFailures true to ignore send failures. 
*/ 
public void setIgnoreSendFailures(boolean ignoreSendFailures) { 

Ou si vous le souhaitez pour la configuration XML:

<xsd:attribute name="ignore-send-failures"> 
     <xsd:annotation> 
      <xsd:documentation><![CDATA[ 
       If set to "true", failures to send to a message channel will 
       be ignored. If set to "false", a MessageDeliveryException will be 
       thrown instead, and if the router resolves more than one channel, 
       any subsequent channels will not receive the message. 

       Please be aware that when using direct channels (single threaded), 
       send-failures can be caused by exceptions thrown by components 
       much further down-stream. 

       This attribute defaults to false. 
      ]]></xsd:documentation> 
     </xsd:annotation> 
     <xsd:simpleType> 
      <xsd:union memberTypes="xsd:boolean xsd:string" /> 
     </xsd:simpleType> 
    </xsd:attribute> 
+0

Merci pour votre réponse Artem. La chaîne channel1 est complétée si une exception est survenue dans channel2 si nous ajoutons ignore-send-failures .. Mais alors le contrôle ne va pas au canal d'erreur .. :( – kattoor

+0

Ok. Vous pouvez placer '' channel entre 'splitter' et 'router', et ajoutez' error-channel' au ' 'du routeur, mais ensuite' ignore-send-failure' devrait être éteint.Ainsi, à travers la file d'attente, vous libérez le thread de séparation des exceptions et il continuer à émettre –

+0

Merci beaucoup Artem. J'ai essayé avec l'exécuteur de tâches comme ci-dessous et cela a fonctionné :) Hope et faire le même travail? ' ' – kattoor