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

Apache Camel-消息重新传递发生在OneException块执行之前

须捷
2023-03-14

有以下骆驼路线。

@Override
public void configure() throws Exception {

onException(java.lang.Exception.class).useOriginalMessage()
.beanRef("discoveryService", "updateConnection")
.redeliveryPolicyRef("redeliverMessagePolicy");

from(ENDPOINT_URI).to(queueName);
}

重新交付策略在xml中定义如下-

<redeliveryPolicyProfile id="redeliverMessagePolicy"
    retryAttemptedLogLevel="WARN" maximumRedeliveries="8"
    redeliveryDelay="${redeliveryDelay}" />

但是,当抛出异常时,会在执行OnException块之前进行重新传递尝试(一些配置属性会在onException块中更新。在OnException内部的DiscoveryService中有一个调试点,它会在进行重新传递尝试后被调用)。因此,当前消息在没有重新传递的情况下丢失。不确定为什么会发生这种情况。使用actiemq-camel版本5.8.0 Thnks

共有1个答案

赫连飞沉
2023-03-14

是的,这是有意的,OneException块仅在交换耗尽时执行(例如,在所有重新交付尝试都失败之后)。

在文档中阅读有关Camel中错误处理方式的更多信息

  • http://camel.apache.org/error-handling-in-camel.html

如果你有一本骆驼在行动的书,它有整整一章专门介绍错误处理(最完整的留档)

如果您想在每次重新交付之前执行一些自定义逻辑,那么请使用onRe交付处理器:http://camel.apache.org/exception-clause.html

 类似资料:
  • 我正在读一条来自Solace的信息。我能够成功地阅读信息。假设我正在阅读一条消息,在侦听器线程上读取/处理消息时,应用程序崩溃。那我怎么能在那上面再读一遍那条信息呢。使用下面的代码,我无法再次阅读该消息。下面是我的配置

  • 在我们的项目中,我们使用Firebase云消息传递来进行推送通知,我们遇到了消息重复的问题。我们过程如下所示: xamarin.firebase.ios.CloudMessaging 3.1.2 xamarin.firebase.ios.instanceID 3.2.1 xamarin.firebase.ios.core 5.1.3 订阅用户主题推荐 发送主题订阅者请求的通知 null 但是,当用

  • 我正在使用apacheMQ作为队列管理器。我使用Spring的DefaultMessageListenerContainer来使用消息。我已经对它进行了配置,以便它有一个事务:

  • 我遇到了在多个请求下扩展应用程序的问题。 每个请求都向一个参与者发送一个ask,然后生成其他参与者。这是很好的,但是,在负载下(一次5个以上的询问),会花费大量的时间将消息传递给目标执行元。最初的设计是均匀地隔离请求,但这造成了一个瓶颈。示例: 在此图片中,是在查询计划解析程序之后发送的。但是,当执行元接收到此消息时有一个多秒的间隔。这只在负载(5+请求/秒)下才会出现。我最初以为这是一个饥饿的问

  • 我们有一个camel路由,在这里我们从输入队列读取消息,处理它,设置一些JMS头(使用exchange.getin().setheader(...)),然后将消息路由到某个输出队列。在MQ故障转移方案期间,将重新传递消息。但是,当重新传递消息时,我前面放置的JMS头丢失了。是否有任何方法可以在重新交付后保留JMS头?

  • 我读到:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2 "通常,确认特定消息会确认会话接收的所有先前消息"(在客户端确认模式下) “邮件重新传递不是自动的,但在某些情况下会重新传递邮件” 我的问题是: 如何确保每次收到消息时都有一个