Apache camel 驼峰-如何在异常情况下停止路由执行?
当发现异常时,是否有任何方法可以停止路由执行(显示日志消息后)Apache camel 驼峰-如何在异常情况下停止路由执行?,apache-camel,Apache Camel,当发现异常时,是否有任何方法可以停止路由执行(显示日志消息后) <doTry> <process ref="messageProcessor"/> <doCatch> <exception>java.lang.IllegalArgumentException</exception> <log messag
<doTry>
<process ref="messageProcessor"/>
<doCatch>
<exception>java.lang.IllegalArgumentException</exception>
<log message="some message related to the exception" />
</doCatch>
</doTry>
java.lang.IllegalArgumentException
请在Spring DSL中提供实现这一点的方法。我已经尝试了
<doTry>
<process ref="messageProcessor"/>
<doCatch>
<exception>java.lang.IllegalArgumentException</exception>
<handled>
<constant>true</constant>
</handled>
<setHeader headerName="exceptionStackTrace">
<simple>${exception.stacktrace}</simple>
</setHeader>
<process ref="mandatoryParameterIsNull"/>
</doCatch>
</doTry>
如果您创建一个OneException路由? 像这样:
onException(Exception.class)
.log("YOUR LOG EXCEPTION");
from("direct:start")...
有很多方法可以做到这一点。除了公认的答案外,您可能还希望使用以下选项之一:
onException(SomeException.class)
.log("Uh oh...")
.stop()
在您的DSL中
或:
在处理器()中
请在此处查看有关此主题的官方文档:停止当前执行的路由,但路由仍在侦听
route.onException(Throwable.class).process(ThrowableProcessor.NAME).handled(true)代码>你有没有在Java DSL中找到解决方案?关于这段代码的一些解释可能会有帮助。对此我很抱歉,我写得很快。如果您使用route OneException,您将为所有路由错误创建一个通用异常,因此如果您需要停止执行,我相信这是记录某些内容并停止路由的最佳方式。仅对于rememember,OneException路由是一个普通路由,因此您可以根据需要使用进程或bean。全局范围OneException()
(在任何路由之外)使用生产者(log(…)
)创建一个额外路由,其中的stop()
仅停止此错误处理路由本身,而不是最初引发异常的路由。
onException(SomeException.class)
.log("Uh oh...")
.stop()
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);