当前位置: 首页 > 知识库问答 >
问题:

异常后更新骆驼交换体,继续路线

张浩阔
2023-03-14

希望你有时间回答我的问题。在过去的几天里,我一直在阅读关于Camel的文章,并设法将一切都设置好并运行起来。现在,我碰到了一个棘手的部分:)。基本上,我在运行时使用Java定义一个路由,并将路由配置放在DB中。路线是可行的,信息从一边流向另一边。但是,当异常发生时,我想知道异常发生在哪里(在哪个路由endpoint之间),在DB中html" target="_blank">存储当前的交换主体(对进一步处理有用的进行中的消息),由用户更新消息,然后从异常点(它失败的地方)重试路由执行。假设所有路由步骤都是幂等的。

我的解决方案:

  1. 为路由创建拦截器
  2. 路线尽可能多地切成颗粒(每个新步骤都是一条新路线)
  3. 在每个步骤之间,使用当前和未来步骤以及当前交换机构更新数据库
  4. 如果发生异常,请将消息存储在 DB 中,使用编辑器进行更新
  5. 使用生产者模板将消息发送到下一个路由点(取自 DB)

对此,你怎么看?这是可行的还是骆驼不能用这种方法支持我?

感谢您的耐心等待和抽出宝贵时间。希望我足够清楚。

共有2个答案

齐涛
2023-03-14

您应该使用< code>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骆驼站点上查阅确切的详细信息,因为我刚刚在这里编写了此代码

云育
2023-03-14

您可以使用骆驼的示踪剂组件。骆驼网站上已经提供了满足您需求的详细示例:http://camel.apache.org/tracer-example.html

 类似资料:
  • 我正在设置路由1中骆驼交换的属性。我正在尝试在拆分器内的第二条路由中更新该属性。但是在拆分器的第二次迭代中,我得到的是我在路由1中设置的原始值,而不是新的更新值。下面是我正在尝试的示例。。 豆子里面: 为什么不更新属性?甚至我也试着在标题中设置。同样的结果。非常感谢。

  • 我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有

  • 脚本: CSV文件被发送到我的endpoint,Pojo将java数据和消息转换为我的一条路由,比如(“direct:consume”)路由,然后处理器处理该文件,处理消息并创建新的输出 问题: 文件只包含代码中断的一行 文件包含多行代码工作 尝试: 试图找到一种方法来确定交易记录的数量。getIn()。getBody() 阅读stackoverflow 阅读有关exchange的文档 在不知道记

  • 我正在尝试从目录中选取一个文件,拆分一个文件,并将每一个拆分行添加到ActiveMQ中。我在这个过程中遇到了异常处理的问题。假设目录中的文件是一个二进制文件(可执行文件),那么splitter会显示org.apache.camel.runtimeCamelException和java.nio.charset.MalFormedInputException异常。如果出现这种情况,那么我需要捕获这些异

  • 在Apache Camel中是否有可能注册一个处理程序来管理由于已达到延续超时而无法写入jettyendpointhttp响应的交换?

  • 我正在将CSV文件输入集成到一个更大的系统中,我想对其进行设置,以便将CSV中未正确解析的各行(由)发送到医院队列,并将所有其他工作行转换为一个对象并聚合到一个列表中。但是,我很难将