2017-08-30 1 views
0
<int:channel id="emailInputChannel"/> 
<!-- Email Poller. Only one poller thread --> 
<task:executor id="emailPollingExecutor" pool-size="1" /> 
<int-mail:inbound-channel-adapter id="pop3EmailAdapter" store-uri="pop3://${pop3.user}:${pop3.pwd}@${pop3.server.host}/Inbox" 
channel="emailInputChannel" should-delete-messages="true" auto-startup="true" java-mail-properties="javaMailProperties"> 
      <int:poller max-messages-per-poll="1" fixed-delay="${email.poller.delay}" task-executor="emailPollingExecutor"/> 
</int-mail:inbound-channel-adapter> 
<!-- Java Mail POP3 properties --> 
<util:properties id="javaMailProperties"> 
    <beans:prop key="mail.debug">true</beans:prop> 
    <beans:prop key="mail.pop3.port">${pop3.server.port}</beans:prop> 
</util:properties> 

Cette demande de sondages e-mails contenant des pièces jointes de fichiers d'application qui contiennent les données à traiter. Les pièces jointes sont généralement envoyées quelques fois par jour et sont relativement sporadiques. Étant donné que les fichiers contiennent des données pour le chargement en bloc, nous avons eu recours à cette configuration avec un seul scrutateur pour l'adaptateur de courrier entrant POP3. La présence de plusieurs scrutins a provoqué des invocations d'interrogation en double pour extraire le même courrier électronique alors qu'un autre scrutateur le traite. Avec cette configuration, cependant, l'interrogateur unique se bloque après un certain temps sans aucune indication du problème dans les journaux. Veuillez revoir ce qui ne va pas avec cette configuration. En outre, existe-t-il un autre moyen de déclencher l'adaptateur de courrier électronique (par exemple, cron etc. à intervalles réguliers)? J'utilise Spring Integration 2.1Spring Integration courrier entrant canal adaptateur configuré pour l'accès POP3 et en utilisant une configuration de Poller se bloque après l'exécution pendant un certain temps

Répondre

0

Un pollueur accroché est probablement causé par le fil coincé dans le code utilisateur. Je vois que vous avez mail.debug = true. Si cela ne montre aucune activité, alors un thread accroché est probablement la cause. Utilise-nous jstack pour prendre une décharge de fil.

Oui, vous pouvez utiliser une expression de couronne, mais cela ne devrait pas changer les choses.

2.1 est extrêmement vieux mais je pense toujours qu'un fil bloqué est la cause.

+0

Merci pour votre réponse. Je vais essayer de capturer la décharge de thread lorsque le problème se manifeste. Existe-t-il une autre solution n'impliquant pas l'utilisation de la configuration de l'interrogateur pour obtenir la même fonctionnalité. Cette application est axée sur les courriels et la fréquence des courriels n'est pas très grande. Ainsi, un travail périodique qui débute périodiquement, disons une fois par heure, peut fonctionner. Le seul revers de la médaille est que le traitement ne se fait pas en temps opportun. Si vous pouvez penser à d'autres alternatives, s'il vous plaît faites le moi savoir. –

+0

Dans mon expérience, si l'interrogation s'arrête, cela signifie que le thread est bloqué dans le code utilisateur ou un autre code a épuisé le pool de threads dans le planificateur par défaut. Vous ne devriez généralement pas exécuter de tâches de longue durée sur les threads de polling; le planificateur n'a que 10 threads par défaut, mais [peut être reconfiguré] (https://docs.spring.io/spring-integration/reference/html/configuration.html#namespace-taskscheduler). Un vidage de thread exposera l'une ou l'autre condition. –