如何使用 camel-activemq-starter 的事务处理标志回滚消息

How to rollback message using transacted flag for camel-activemq-starter

我正在使用带有 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();

添加 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