Mule中使用日期的JMS消息选择器

Mule中使用日期的JMS消息选择器,mule,delay,Mule,Delay,在Mule 3.3.1中,在异步处理期间,当我的任何外部服务关闭时,我希望将消息放置在具有特定下次重试时间戳的队列retryQueue上。处理来自此retryQueue的消息的流根据下一次重试时间选择消息,就像如果下一次重试时间超过当前时间,请选择要处理的消息一样。类似于下面链接中提到的内容 您能提供实现这一点的示例代码吗 我试过: <on-redelivery-attempts-exceeded> <message-properties-transformer scope

在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]" />
表达方式如下:

<jms:selector expression="#[header:INBOUND:putOnQueueTime > ((function:now) - 30)]"/>
应该计算为有效的JMS选择器,但这里不是这样。尝试:

<jms:selector expression="putOnQueueTime > #[XXX]"/>

将XXX替换为创建所需时间的表达式。

我们试图在我正在进行的一个项目中实现这一点,并尝试了此处另一个答案中的建议,但没有成功,存在各种差异。问题是jms:selector不支持MEL,因为它依赖于ActiveMQ类

我们向Mulesoft注册了一张支持票,他们的回答是不支持

我们最后做的是:

创建一个简单组件,该组件执行Thread.sleepnumberOfMillis,其中millis的数量在属性中定义。 在本应延迟处理的流程中,我们在从入站端点读取消息后添加了此组件作为第一步。
这不是有史以来最好的解决方案,但很有效。

您尝试过什么?分享您的配置和问题,以便我们能够帮助您。@DavidSott您需要任何其他信息吗?不幸的是,这就是我被困的地方!我需要计算出[XXX],它会给我一些过去的时间…比如…当前时间-30分钟。“putOnQueueTime”属性中的值是字符串,对吗?您可以在表达式中使用SimpleDataFormat以所需格式格式化任何日期。我正在考虑以毫秒为单位设置时间。我试过了,但没用。我获取WebSphere MQ classes for JMS已为JMS提供程序提供了一个语法无效的消息选择器请参阅抱歉中的“消息选择器”部分……我在“消息选择器”部分中查找什么?我读了两遍……但无法指出问题所在。我看到这个。。。日期和时间值应该使用标准的长毫秒值……但这正是我要做的。谢谢你的帮助。