2012-11-06 70 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 - 但這是我需要調查的更多內容!再次感謝 –