【发布时间】:2013-08-30 18:29:27
【问题描述】:
在 Mule 3.3.1 中,在异步处理期间,当我的任何外部服务关闭时,我想将消息放在具有特定“下一次重试”时间戳的队列 (retryQueue) 上。处理来自此retryQueue 的消息的流根据“下一次重试”时间选择消息,如果“下一次重试”时间超过当前时间,则选择要处理的消息。类似于以下链接中提到的内容。
Retry JMS queue implementation to deliver failed messages after certain interval of time
您能否提供实现此目的的示例代码?
我试过了:
<on-redelivery-attempts-exceeded>
<message-properties-transformer scope="outbound">
<add-message-property key="putOnQueueTime" value="#[function:datestamp:yyyy-MM-dd hh:mm:ssZ]" />
</message-properties-transformer>
<jms:outbound-endpoint ref="retryQueue"/>
</on-redelivery-attempts-exceeded>
在接收流上
<jms:inbound-endpoint ref="retryQueue">
<!-- I have no idea how to do the selector....
I tried....<jms:selector expression="#[header:INBOUND:putOnQueueTime > ((function:now) - 30)]"/>, but obviously it doesn't work. Gives me an invalid message selector. -->
</jms:inbound-endpoint>.
另一个注意事项:如果我使用
设置出站属性<add-message-property key="putOnQueueTime" value="#[function:now]"/>,
它不会作为页眉的一部分被继承。这就是为什么我将其更改为:
<add-message-property key="putOnQueueTime" value="#[function:datestamp:yyyy-MM-dd hh:mm:ssZ]" />
【问题讨论】:
-
你试过什么?分享您的配置和问题,以便我们为您提供帮助。
-
@DavidDossot 您需要任何其他信息吗?