0

我对 Spring 集成相当陌生,但学习至今。

我从一个名为“Channel-1”的频道收到消息,并通过网桥传递给“Channel-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”,但从未超出 - 没有错误,没有日志,全部处于调试模式,没有任何痕迹。

所以我的问题是:

1) 流程后期发生的错误是否是导致此类问题的原因?

2)如何无缘无故地调试这样的消息并且没有任何错误?

3)通过这些渠道进行钻探的任何其他建议或指示都会很棒

4

1 回答 1

1
  1. 在调试模式下,如果您真的要向 Channel-1 发送消息,您将看到“preSend on channel 'Channel-1'...”、“postSend on channel 'Channel-1'...”等。

  2. 一个常见的错误是在 Channel-1 上拥有多个订阅者;默认情况下,使用 RoundRobin 分发;因此,第一条消息将被桥接到 Channel-2,第二条消息将发送到另一个订阅者,依此类推。

使用调试日志,在不查看“preSend”调试日志的情况下向 Channel-1 发送消息是不可能的。

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}]
于 2012-11-06T02:15:49.060 回答