我正在使用spring integration的错误通道来捕获框架中的异常。但是在相同类型的两个通道中,错误处理程序会收到一个抛出的异常,而其他通道则没有。
<int:gateway id="myGateway" service-interface="com.si.MyGateway" request-
channel="myRequestChannel" error-channel="errorHandlingChannel">
<!-- Redirects exceptions to error-channel -->
<int:chain input-channel="myRequestChannel" output-channel="lastChannel">
<int:header-enricher>
<int:error-channel ref="errorHandlingChannel">
<int:header-enricher>
<int:service-activator ref="testActivator1"
method="generateException" requires-reply="true" />
</int:chain>
<!-- Does not redirect exceptions to error-channel -->
<int:chain input-channel="lastChannel" output-
channel="nullChannel">
<int:header-enricher>
<int:error-channel ref="errorHandlingChannel">
<int:header-enricher>
<int:service-activator ref="testActivator2"
method="generateException" requires-reply="true" />
<int:filter ref="myFilter" discard-channel="nullChannel" />
<int:service-activator ref="testActivator3"
method="generateException" requires-reply="true" />
<int:filter ref="myFilter" discard-channel="nullChannel" />
</int:chain>
<int:service-activator input-channel="errorHandlingChannel"
ref="errorHandler" method="handle" />
&#13;
errorHandler的handle方法接受MessagingException。当我从myRequestChannel抛出异常时,它会被errorHandler接收,但是当从testActivator2或testActivator3抛出相同的异常时,它根本不会到达errorHandler。
两个频道都被定义为异步频道:
<int:channel>
<int:queue capacity="10">
</int:channel>
&#13;
在调试时,我发现所有方法都是&#39;当内部类最终抛出MessagingException时,异常被抛出并通过spring类跟随链,但最后两个激活器的异常没有到达处理程序。
可能是什么原因?
答案 0 :(得分:0)
你会抛出什么样的例外?
如果是MessagingException
,则必须提供failedMessage
,否则错误会发送到errorChannel
上的默认<poller>
。