【发布时间】: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