在 Mule 3.3.1 中,在异步处理期间,当我的任何外部服务关闭时,我想将消息放在retryQueue
具有特定“下一次重试”时间戳的队列 () 上。从中处理消息的流retryQueue
根据“下一次重试”时间选择消息,如果“下一次重试”时间超过当前时间,则选择要处理的消息。类似于以下链接中提到的内容。
您能否提供示例代码来实现这一目标?
我试过了:
<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]" />