首页 文章

JMSExpiration与TimeToLive

提问于
浏览
6

我正在尝试在Blueprint XML Camel路由中设置消息过期 . 我想要设置为到期的值保存在消息正文中(protobuf) .

这是我的代码: -

<setHeader headerName="AMQ_SCHEDULED_DELAY">
    <method bean="NotificationScheduler" method="postponeSending" />
</setHeader>
<setHeader headerName="JMSExpiration">
    <method bean="NotificationScheduler" method="getExpiry" />
</setHeader>
<setHeader headerName="ExpirationTest">
    <method bean="NotificationScheduler" method="getExpiry" />
</setHeader>
<to uri="activemq:notifications.splitter" />

正如您在下面的屏幕截图中看到的,我成功设置了三个 Headers 中的两个,但"JMSExpiration"的设置(根据this thread)没有任何效果 .

ActiveMQWeb snippet

我知道我也可以使用收件人列表模式动态设置uri - 即从消息数据中提取到期并附加 ?timeToLive=... 选项 . 然而,这对我来说似乎有点笨拙 .

有没有办法通过XML中的setHeader设置过期?

谢谢,

J.

1 回答

  • 3

    将你的uri更改为: activemq:notifications.splitter?preserveMessageQos=true 你应该没事 .

    某些JMS标头可以像您尝试使用此选项一样“手动”覆盖 .

    请注意,您可能需要预先考虑,因为如果您正在侦听一个JMS endpoints ,则到达的消息将填充JMS标头,并且当您在"to"中发送消息时,该消息将保留 JMSDeliveryModeJMSExpirationJMSPriority . 这可能是也可能不是你想要的 .

相关问题