在 Mule 3.3.1 中,在异步处理期间,当我的任何外部服务关闭时,我想将消息放在队列中(retryQueue
)具有特定的“下次重试”时间戳。处理来自此的消息的流程retryQueue
根据“下次重试”时间选择消息,如果“下次重试”时间超过当前时间,则选择要处理的消息。类似于以下链接中提到的内容。
重试 JMS 队列实现以在一定时间间隔后传递失败的消息 https://stackoverflow.com/questions/17838222/retry-jms-queue-implementation-to-deliver-failed-messages-after-certain-interval
您能否提供示例代码来实现此目的?
I tried:
<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]" />
表达式中:
<jms:selector expression="#[header:INBOUND:putOnQueueTime > ((function:now) - 30)]"/>
应该评估为有效的 JMS 选择器,但这里的情况并非如此。尝试使用:
<jms:selector expression="putOnQueueTime > #[XXX]"/>
将 XXX 替换为可创建所需时间的表达式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)