我们使用来自主题的camel路由为队列中的消息配置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>
然后我们从ActiveMQ Web界面发送一些测试消息 . 在timeToLive(10分钟)之后,我们希望消息转到DLQ . 在此之后,消息将保留在其队列中 . 有趣的是,如果我们从Web界面访问队列内容,所有消息似乎都被“处理”并在此时发送到DLQ(好像我们的访问触发了检查) .
当我们从Web界面访问队列时,为什么会发生这种情况?我们是否缺少一些配置参数来安排检查过期消息? (注意:我们在代理中有schedulerSupport =“true”)