【问题标题】:How to rollback message using transacted flag for camel-activemq-starter如何使用camel-activemq-starter的事务标志回滚消息
【发布时间】:2020-11-11 11:25:53
【问题描述】:

我正在使用带有 yaml 自动配置的 camel-activemq-starter。当我在消费者上使用“?transacted=true”标志时,消息会转到 DLQ。如果骆驼路线出现异常,我正在寻找的行为不是从队列中删除消息。使用带有camel-sjms和camel-jms的“transacted=true”标志,这按预期工作。预先感谢您的帮助!下面是 yaml 配置。

camel:
  component:
    reactive-streams:
      thread-pool-max-size: 5
    activemq:
      broker-url: "tcp://localhost:61616"
      connection-factory: ActiveMQConnectionFactory
      transaction-manager: JmsTransactionManager

以下是路线的大致样子:

    fromF("activemq:queue:queue?transacted=true")
                    .routeId("stopThisRoute")
                    .process(exchange -> {
----- something ------
                    })
                    -------
                            throw new IllegalStateException();
========
                        })
                    .end();

【问题讨论】:

  • 这看起来很奇怪。您是否有回购或可以用最少的可重复样本更新问题?
  • 我无法想象这在camel-jms 中如何工作,而在camel-activemq 中却不工作。 camel-activemq 只是扩展 camel-jms 没有额外的端点或消费者逻辑。请提及骆驼版本和可重复的样本会很棒。
  • 骆驼版本是3.3.0。请注意,消息确实会发送到 DLQ,但我正在寻找的是消息留在队列中。在 camel-jms 和 camel-sjms 中,只要设置 transacted=true 就会在出现异常时将消息保留在队列中。
  • @根据您的上一条评论,似乎该已交易标志仍在 activemq 中工作,但已移至 DLQ。您是否检查它是否存在于该队列中?如果是这种情况,您想更新问题
  • @Kavithakaran,我已经更新了这个问题。让我知道是否需要进一步澄清。

标签: spring-boot apache-camel activemq spring-jms


【解决方案1】:

添加 ack 模式使用 camel-activemq-starter 解决了这个问题。可能它不是“问题”,只是一种不同的行为。

camel:
  component:
    activemq:
      broker-url: "tcp://localhost:61616"
      connection-factory: CachingConnectionFactory
      transacted: true
      transaction-manager: JmsTransactionManager
      acknowledgement-mode-name: CLIENT_ACKNOWLEDGE

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2013-09-13
    • 2021-03-07
    • 2022-01-19
    • 2019-04-02
    • 2016-06-20
    • 2015-12-31
    • 2010-11-07
    相关资源
    最近更新 更多