Java 在异常后更新camel exchange正文并继续路由
希望你有时间回答我的问题。在过去的几天里,我一直在读有关骆驼的书,并设法把一切都设置好并运行起来。现在,我遇到了一个棘手的问题:)。基本上,我在运行时使用Java定义了一个路由,并将路由配置放在DB中。路由正在工作,消息正在从一侧流向另一侧。但是,当发生异常时,我希望知道异常发生的位置(在哪个路由端点之间),将当前exchange正文(对进一步处理有用的正在运行的消息)存储在DB中,由用户更新消息,然后从异常点重试路由执行(在异常点失败)。假设所有的路由步骤都是幂等的 我的解决方案:Java 在异常后更新camel exchange正文并继续路由,java,spring,apache-camel,Java,Spring,Apache Camel,希望你有时间回答我的问题。在过去的几天里,我一直在读有关骆驼的书,并设法把一切都设置好并运行起来。现在,我遇到了一个棘手的问题:)。基本上,我在运行时使用Java定义了一个路由,并将路由配置放在DB中。路由正在工作,消息正在从一侧流向另一侧。但是,当发生异常时,我希望知道异常发生的位置(在哪个路由端点之间),将当前exchange正文(对进一步处理有用的正在运行的消息)存储在DB中,由用户更新消息,然后从异常点重试路由执行(在异常点失败)。假设所有的路由步骤都是幂等的 我的解决方案: 为路线设置
希望我说得够清楚。您可以使用Camel的跟踪组件。camel的网站上已经提供了一个满足您需求的详细示例:您应该使用
onException()
子句来解决这个问题。例如:
public void configure() throws Exception{
//This is a global onException definition and will work for all routes defined in this calss
onException().process(new Processor(){
public void process(Exchang arg0){
Exception e = arg0.getProperty(Exchange.EXCEPTION_CAUGHT,Exception.class);
//get message and other properties that you are interested in
db.saveOrUpdate(/*Pass your custom object here*/);
}
}).handled(true);
from("direct:route1")
//some processing
.to("jms:route1");
from("direct:route2")
//some processing
.to("http://route2");
}
您可能需要在apache camel站点上查阅详细信息,因为我刚刚在这里编写了这段代码。感谢您的帮助Hussain,我已经集成了Tracer,因为它是一种拦截策略。我的问题是关于使用ProducerTemplate向路由发送消息的整个方法和可能性。我想检查一下我的方法是否正确。谢谢西科尔斯基,你像侯赛因一样给了我宝贵的建议。希望这意味着我的方法是正确的和可能的。致以最良好的祝愿,米兰