Apache camel 在访问队列之前,不会应用来自驼峰路由的Activemq timeToLive

Apache camel 在访问队列之前,不会应用来自驼峰路由的Activemq timeToLive,apache-camel,activemq,Apache Camel,Activemq,我们正在使用来自主题的驼峰路由为队列中的消息配置timeToLive,如下所示: <route errorHandlerRef="BrokerErrorHandlerEvents"> <description>MQTT Events</description> <from uri="ourbroker:topic:events.>"/> <setHeader hea

我们正在使用来自主题的驼峰路由为队列中的消息配置timeToLive,如下所示:

<route errorHandlerRef="BrokerErrorHandlerEvents">
            <description>MQTT Events</description>
            <from uri="ourbroker:topic:events.>"/>
            <setHeader headerName="myUser">
                <simple>${headers.JMSXUserID}</simple>
            </setHeader>
            <setHeader headerName="myTopic">
                <simple>ssc.${headers.JMSDestination}</simple>
            </setHeader>
            <setHeader headerName="msgReceived">
                <simple>${headers.JMSTimestamp}</simple>
            </setHeader>
            <to uri="ourbroker:queue:ourqueue.ourbroker_events?
timeToLive=600000"/>
        </route>

MQTT事件
${headers.JMSXUserID}
ssc.${headers.JMSDestination}
${headers.jmstiestamp}
然后,我们从ActiveMQ web界面发送一些测试消息。在timeToLive(10分钟)之后,我们希望消息能够发送到DLQ。在此时间之后,消息将保留在其队列中。有趣的是,如果我们从web界面访问队列内容,那么此时所有消息似乎都被“处理”并发送到DLQ(就好像我们的访问触发了检查一样)


当我们从web界面访问队列时,为什么会发生这种情况?我们是否缺少一些用于计划过期消息检查的配置参数?(注意:我们在代理中有schedulerSupport=“true”)

根据这一点,似乎只有当有消费者在收听该主题时,消息才会被丢弃。这可以解释为什么只有在您积极查找主题时,才会将消息发送到DLQ。我们有一个用于队列的消费者。使用者负责所有结构正确的消息,并将未处理的消息(我们的测试消息)带回队列。我们的正常操作消息通过,其他消息留在队列中,直到我们打开它,在这一刻,它们进入DLQ,因为它们的生存时间已经过期。但是为什么只是在我们检查的时候?它必须是一个特定类型的消费者吗?根据这项研究,似乎只有当有消费者在听这个话题时,这些信息才会被丢弃。这可以解释为什么只有在您积极查找主题时,才会将消息发送到DLQ。我们有一个用于队列的消费者。使用者负责所有结构正确的消息,并将未处理的消息(我们的测试消息)带回队列。我们的正常操作消息通过,其他消息留在队列中,直到我们打开它,在这一刻,它们进入DLQ,因为它们的生存时间已经过期。但是为什么只是在我们检查的时候?它必须是特定类型的消费者吗?