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

如何在骆驼路线中提交MQ事务?

白星海
2023-03-14

有一条骆驼路线,它被处理,异常由TransactionError Handler处理。代码如下所示:

...
<bean
    id="errorHandler"
    class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
</bean>
...
<camelContext errorHandlerRef="errorHandler">
    ...
    <onException>
        <exception>java.lang.Exception</exception>
        <handled>
            <constant>true</constant>
        </handled>
        <!-- do some exception handling -->
    </onException>

    <route>
        <from uri="mq:queue://QMgr/Q?exchangePattern=InOut" />
        <transacted />
        <!-- some routing that throws an Exception -->
    </route>
</camelContext>

它是有效的,并且在错误被处理后,事务有一个提交:事务提交(0xFab75a3a)重新传递(true)for…,但是然后消息再次被放入输入队列中,事务从头开始(无尽循环)。

我们正在使用IBM MQ,我认为这种回滚是由MQ执行的,而不是从camel路线执行的。所以问题是:我能告诉MQ我处理了异常,并且它不应该再次回滚吗?

共有1个答案

吕昀
2023-03-14

IBM MQ 正在通过设计将消息重新发送给消费者。要让代理在 X 次尝试后停止,请为 IBM MQ 配置“撤销阈值”和“中断队列”,以便在传递尝试失败后将消息移开。

 类似资料:
  • 我有: < Li > Camel route(transactioned = true),从MQ队列消费 < li >使用Spring的websphereowtransactionmanager < li >事务性起作用 < li >在IBM Liberty上运行 但是,我收到以下消息: 这似乎与另一个堆栈溢出问题有关,但我已经尝试更改服务器中的配置。xml,但没有成功。

  • 我正在寻找一些关于如何使用骆驼路线实现以下模式的想法: 客户端通过HTTP restendpoint调用web服务(originalService) 服务接受服务的主体,并将其作为作业提交给另一个web服务(jobService)。此辅助服务返回作业id。 使用作业id,originalService轮询jobService的时间不超过x秒。Originalservice将把提交的服务的结果返回给

  • 如前所述,如何使用camel kafka手动控制偏移提交?我想使用camel kafka手动提交偏移量。我的路线: ,其中将在将消息发送到另一个主题后进行promise。 问题是,聚合器和Kafka制作者在Kafka消费者负责抵消promise的独立线程中工作。因此,我以 聚合并分派提交偏移量后,是否有可能再次调用使用者线程?

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 我有一个Camel 2.13.1应用程序,它使用一个通过CXF组件访问的外部web服务。我使用Spring XML route元素的startupOrder属性来确保在我设置为在启动时调用一次的路由中调用web服务的登录操作(使用计时器组件)。 当我的应用程序关闭时,我想调用web服务并执行注销操作,但我看不到一个好方法。目前我正在使用Spring DSL,并正在研究该组织。阿帕奇。骆驼spi。S

  • 问题内容: 我正在尝试从骆驼路线中删除一些样板。 例如,让我们考虑两条路线,它们是相似的,并且它们的大部分内部物质都可以生成。我已经创建了一个组件“模板”,该模板创建了,并修改了XML配置以使用模板组件。 正在从中定义自定义方法(添加路线定义)。因此,在启动Camel上下文时,路由定义会出现在上下文中,但是框架不会为其创建路由服务,因此它们不会启动。 如何开始添加路线? 可能我遇到了XY问题,您可