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

在出现特定异常的情况下,无法连续重试骆驼路线

甄成弘
2023-03-14

我对Apache骆驼很陌生,我有需要执行以下操作的情况

每当我收到特定类型的异常时,我都需要再次重试完整的路由,但是在使用 onException 实现时,我遇到了循环错误处理异常和无限递归的问题。

下面是我的虚拟代码

 from("direct:updateTheTask")
.to("direct:getWoTaskDetail")
.to("direct:getSoTaskDetail")
.to("direct:updateTaskDetail")
.to("direct:getSoTaskDetail")   
.to("direct:getWoTaskDetail")
.to("direct:endRoute");


 from("direct:updateTaskDetail").routeId("updateTaskDetail")
.bean(BEAN, Constants.SET_PARAMS)
.to("direct:restUpdate")
.to(getGetResponseBeanUrl(BEAN));

我有一个调用“直接:更新任务”路由和“直接:更新任务详细信息”在我的情况下,当收到异常时,我想从“直接:更新任务”重试一次,维护/访问数据作为交换。

当在递归过程中“direct:updateTaskDetail”没有抛出此类异常时,路由应该正常完成。

我使用了以下 2 种方法,但似乎它对我不起作用。

onException(TaskException.class)
.handled(true)
.maximumRedeliveries(-1)
.redeliveryDelay(20);

另一种方法是

onException(TaskException.class)
.handled(true)
.delay(20)
.to("direct:updateTheTroubleTicket");

共有1个答案

淳于典
2023-03-14

关闭任务路由中的错误处理程序,这样当调用此路由时,Camel将重试整个路由,而不是路由错误处理程序将在错误点重试。

from("direct:updateTheTask")
  .errorHandler(noErrorHandler());
  .to("direct:getWoTaskDetail")
 类似资料:
  • 希望你有时间回答我的问题。在过去的几天里,我一直在阅读关于Camel的文章,并设法将一切都设置好并运行起来。现在,我碰到了一个棘手的部分:)。基本上,我在运行时使用Java定义一个路由,并将路由配置放在DB中。路线是可行的,信息从一边流向另一边。但是,当异常发生时,我想知道异常发生在哪里(在哪个路由endpoint之间),在DB中存储当前的交换主体(对进一步处理有用的进行中的消息),由用户更新消息

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

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

  • 我有一个队列系统,骆驼只是其中的一小部分。在此队列系统中,对于某些队列,代理在队列已满时返回 FAIL。为了解决这个问题,我查看我得到的 JMS 异常,从消息中我可以看到原因是否是队列已满。 我想在Camel中实现的是,对于满队列的特定情况,我希望重试传递,而对于任何其他JMS异常(或任何其他异常),我希望将其发送到DLQ。 我假设我必须使用onException(JMSException.cla

  • 我试图使用Kerberos从ActiveMQ-Camel桥向Kafka (Cloudera)发送消息。 ActiveMQ v5.15.4 骆驼:2.21.1 Kafka客户端:1.1.0 服务器版本:Apache/2.4.6(CentOS) 骆驼.xml剪刀是: 这是日志中的kafka客户端配置: 日志级别:调试 Jaas文件: 出口: 当我发送消息时,我在调试级别收到以下日志,但消息未被发送:

  • 当连接到rabbitmq队列服务器失败时,我正在尝试实现重新连接机制。此代码仅用于消费消息,下面是我的代码(channel Init函数负责初始化消费者并绑定到队列)。 连接失败时,我成功收到提示“[AMQP] 重新连接”,但在该队列未重新连接后,控制台日志中没有其他提示。 请帮忙。