2017-09-07 25 views
1

这是一个后续行动这样一个问题:回复消息接收,但接收线程已退出由于超时

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

在继续测试在WebSphere 8.5我的POC,问题重新浮出水面,其中本从天而降错误:

GenericMessagW¯¯org.springframework.messaging.core.GenericMessagingTemplate $ TemporaryReplyChanne升发送回复消息中接收但接收线程已经退出由于超时:的ErrorMessage [有效载荷= org.springframework。 messaging.MessageHandlingExcept离子:在消息处理程序发生错误[productAggregator.generateAggregatedResponse.aggregator.han dler];嵌套异常是java.lang.NullPointerException,headers = {id = d0b52beb-e9bd-0ba2-6062-6ee83b847c4a,timestamp = 1504755248824}]。

我看到这种情况的发生,一旦聚合开始,但有什么不清楚的是嵌套异常“显示java.lang.NullPointerException”,什么这里值是导致超时。另一个问题是,如果聚合器在其输入通道上有一个“等待”的默认超时值,之后它会停止等待,从而导致超时。

任何指针将不胜感激,而我继续调试。

真诚, 巴拉斯

回答

2

打上了一个大大的try/catch在你的聚合代码,找出NPE被抛出在哪里。

该消息由某个上游消息传递网关(或直接使用MessagingTemplate)生成,其中调用线程已超时,并且此模板接收到异步异常。

+0

你必须显示你的'productAggregator.generateAggregatedResponse.aggregator.han dler'。看起来这是NPE发生的地方。根本没有任何与Aggregator组件相关的东西。聚合器上游只有一个网关,并且由于NPE导致我们发生'timeout'错误,因此您的自定义代码没有正常答复。 –

+0

谢谢加里,阿尔乔姆 - 我找到并修复了NPE。现在,聚合器正在将聚合消息发送到其outputChannel(X)。有一个自定义转换器可以获取这个消息,将其转换并放到它的outputChannel(Y)上,这也是完美的。最后一步是从(Y)中读取http网关,此时还有另一个“发送应答消息,但接收线程已由于超时而退出”消息。请注意,(Y)上的消息具有合适的有效负载/头文件,且不包含任何NULL - HTTP网关是否有默认超时w.r.t回复通道? – bmylavar

+0

入站网关的默认超时值为1000毫秒;你可以使用'reply-timeout'属性来增加它。当HTTP线程返回到网关时,超时开始;对于具有异步子流程的流程,通常建议将超时时间增加到比您期望流程所用时间更长的时间。 –