2012-11-06 71 views
0

我对Spring集成相当陌生,但迄今为止学习。通道丢失消息如何调试

我正在从一个名为“通道1”频道的消息,并传递到“通道2”通过桥

<task:executor id="Channel2Executor" pool-size="${executor.pool.size}" rejection-policy="CALLER_RUNS" /> 

<int:channel id="Channel-2"> 
    <int:dispatcher task-executor="Channel2Executor"/> 
</int:channel> 

<int:bridge id="adapterParserBridge" input-channel="Channel-1" output-channel="Channel-2"> 
</int:bridge> 

奇怪的是,当我部署在JBoss中的应用,第一次该消息经过并使得我的后续流程结束,尽管在流程后面的部分有一些错误。

第二次以后,消息到达“Channel-1”,但从未超越 - 没有错误,没有日志,全部在DEBUG模式下,没有任何痕迹。

所以我的问题是:

1)控制这些问题的原因流动的后期发生的错误?

2)如何在没有任何原因和没有任何错误的情况下调试这样的信息滴?

3)任何其他建议或指针通过这些渠道来钻将是巨大的

回答

1
  1. 没有

  2. 在调试模式下,如果你真的要发送消息至频道1,你会看到“preSend on channel'Channel-1'...”,“postSend on channel'Channel-1'...”等。

  3. 一个常见的错误是在Channel-1上有多个用户;默认情况下,使用RoundRobin分发;所以,所述第一消息将被桥接到通道2,第二会去其他订户等

随着调试日志记录,不可能将消息发送给信道-1没有看到,在至少,“preSend”调试日志。

21:09:24.825 DEBUG [someThread][org.springframework.integration.channel.DirectChannel] preSend on channel 'foo', message: [Payload=xxx][Headers={timestamp=1352167764822, id=14b8ae47-08d8-4bf6-94bf-e342eb705df4}] 
+0

非常感谢Gary,你对第(3)点的看法很明确,并且是我的情况。现在大部分消息都会通过桥接和转发,除非在某些情况下,它们将转至LoggingHandler#0,尽管我没有在我的上下文中定义任何LoggingHandler - 但这是我需要调查的更多内容!再次感谢 –