【问题标题】:Reply message received but the receiving thread has exited due to a timeout收到回复消息,但接收线程由于超时而退出
【发布时间】:2017-09-07 03:59:50
【问题描述】:

这是对这个问题的跟进:

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

在继续在 WebSphere 8.5 上测试我的 POC 时,问题再次出现,该错误不知从何而来:

GenericMessag W org.springframework.messaging.core.GenericMessagingTemplate$‌​TemporaryReplyChanne‌​l send 收到回复消息,但接收线程由于超时而退出:ErrorMessage [payload=org.springframework.messaging.MessageHandlingExcept‌​ ion:消息处理程序 [productAggregator.generateAggregatedResponse.aggregator.han‌​dler] 中发生错误;嵌套异常是 java.lang.NullPointerException, headers={id=d0b52beb-e9bd-0ba2-6062-6ee83b847c4a, timestamp=1504755248824}]。

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

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

真诚地, 巴拉特

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    在您的聚合器代码周围进行大量尝试/捕获,以找出抛出 NPE 的位置。

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

    【讨论】:

    • 您必须出示您的productAggregator.generateAggregatedResponse.aggregator.han‌​dler。看起来那是发生 NPE 的地方。与聚合器组件完全无关。聚合器上游只有一个网关,并且由于 NPE 给我们带来了 timeout 错误,因此您的自定义代码没有正常回复。
    • 感谢 Gary,Artem - 我能够找到并修复 NPE。现在,Aggregator 正在将聚合消息发送到它的 outputChannel (X)。有一个自定义转换器可以获取此消息,转换并将其放在其 outputChannel (Y) 上,这也很完美。最后一步是让 http 网关从 (Y) 读取,这一次,还有另一个“收到发送回复消息但接收线程由于超时而退出”消息。请注意,(Y)上的消息具有正确的有效负载/标头,没有任何 NULL - HTTP 网关是否具有默认超时 w.r.t 回复通道?
    • 入站网关默认超时时间为1000ms;您可以使用reply-timeout 属性增加它。 HTTP线程返回网关时开始超时;对于具有异步子流的流,通常建议将超时时间增加到比您期望流花费的时间更长的时间。
    • 太棒了!!我将它设置为更高的值,它的工作就像轻而易举:) 非常感谢!会及时通知您 - 非常感谢您的快速回复和宝贵意见!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2021-10-18
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多