2017-09-07 1 views
1

Ceci est un suivi de cette question:message de réponse reçu, mais le fil de réception est sorti en raison d'un délai d'attente

Spring Integration Aggregator failing - "No reply received within timeout" message being displayed

Tout en continuant à tester mon POC sur WebSphere 8.5, la question refait surface lorsque cela erreur est venu de nulle part:

GenericMessag W org.springframework.messaging.core.GenericMessagingTemplate $ l TemporaryReplyChanne envoyer un message de réponse reçu, mais le fil de réception est sorti en raison d'un délai d'attente: ErrorMessage [= charge utile org.springframework. messagerie.MessageHandlingExcept ion: erreur est survenue dans le gestionnaire de messages [productAggregator.generateAggregatedResponse.aggregator.han dler]; l'exception imbriquée est java.lang.NullPointerException, en-têtes = {id = d0b52beb-e9bd-0ba2-6062-6ee83b847c4a, timestamp = 1504755248824}].

Je vois que cela se passe une fois que le Aggregator a commencé, mais ce qui est pas clair est l'exception imbriquée « java.lang.NullPointerException » et ce que la valeur nulle est ici qui conduit à un délai d'attente. Et l'autre question est de savoir si l'agrégateur a une valeur de délai par défaut pour "attendre" sur son canal d'entrée après quoi il arrête d'attendre, conduisant à un délai d'attente.

Tous les pointeurs seront grandement appréciés pendant que je continue à déboguer.

Sincèrement, Bharat

Répondre

2

Mettez un grand try/catch autour de votre code aggrégateur pour savoir où NPE est jeté.

Le message est généré par une passerelle de messagerie en amont (ou l'utilisation directe d'un MessagingTemplate) où le thread appelant a déjà expiré et cette exception asynchrone est reçue par le modèle.

+0

Vous devez afficher votre 'productAggregator.generateAggregatedResponse.aggregator.han dler'. On dirait que c'est un endroit où NPE arrive. Rien à voir avec le composant Aggregator. Il y a juste une passerelle en amont de l'agrégateur et puisqu'il n'y a pas de réponse normale de votre code personnalisé à cause de NPE qui nous apporte l'erreur 'timeout'. –

+0

Merci Gary, Artem - J'ai pu trouver et réparer le NPE. Maintenant, l'agrégateur envoie le message agrégé à son outputChannel (X). Il y a un custom-transformateur qui reçoit ce message, le transforme et le place sur son outputChannel (Y), qui fonctionne aussi parfaitement. La dernière étape est pour une passerelle http à lire à partir de (Y) et cette fois, il y a encore un autre message "envoyer un message de réponse reçu mais le thread de réception s'est éteint en raison d'un délai". Pour votre note, le message sur (Y) a une charge utile/en-têtes appropriée sans aucune valeur NULL - une passerelle HTTP a-t-elle un délai de réponse par défaut w.r.t? – bmylavar

+0

Le délai d'attente par défaut pour la passerelle entrante est de 1 000 ms; vous pouvez l'augmenter en utilisant l'attribut 'reply-timeout'. Le délai d'attente commence lorsque le thread HTTP retourne à la passerelle; pour les flux qui ont des sous-flux asynchrones, il est généralement recommandé d'augmenter le délai d'attente à quelque chose de plus grand que le temps que vous attendez que le flux prenne. –