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" />

正如您从下面的屏幕截图中看到的那样,我成功设置了三个标题中的两个,但是“JMSExpiration”的设置(根据这个线程)没有任何效果。

ActiveMQWeb 片段

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

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

谢谢,

J。

4

1 回答 1

3

将您的uri更改为:activemq:notifications.splitter?preserveMessageQos=true您应该没问题。

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

请注意,您可能需要采取一些预防措施,因为如果您正在侦听一个 JMS 端点,则到达的消息将填充 JMS 标头,并且当您在“to”中发送消息时,消息将保留JMSDeliveryMode,JMSExpirationJMSPriority. 这可能是也可能不是您想要的。

于 2013-04-06T23:04:54.447 回答