【问题标题】:JMS Message Selector in Mule using dateMule中的JMS消息选择器使用日期
【发布时间】: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 您需要任何其他信息吗?

标签: mule delay


【解决方案1】:

中的表达式:

<jms:selector expression="#[header:INBOUND:putOnQueueTime > ((function:now) - 30)]"/>

应该评估为一个有效的 JMS 选择器,这里不是这种情况。尝试:

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

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

【讨论】:

  • 不幸的是,这是我卡住的地方!我需要弄清楚 #[XXX] 会给我一些过去的时间......比如......(当前时间 - 30 分钟)。
  • 'putOnQueueTime' 属性中的值是一个字符串,对吧?您可以在表达式中使用 SimpleDateFormat 将任何日期格式化为您想要的格式。
  • 我正在考虑以毫秒为单位设置时间。我试过 但它不起作用。我得到“用于 JMS 的 WebSphere MQ 类为 JMS 提供者提供了一个语法无效的消息选择器”
  • 对不起.....我在消息选择器部分寻找什么?我读了两遍……但无法确定问题所在。我看到了这个......“日期和时间值应该使用标准的长毫秒值。”......但这就是我想要做的。感谢您的帮助。
【解决方案2】:

我们试图在我正在从事的一个项目中实现这一目标,并尝试了此处另一个答案中的建议,但它没有奏效,有各种变体。问题是 jms:selector 不支持 MEL,因为它依赖于 ActiveMQ 类。

我们向 Mulesoft 注册了支持票,他们的答复是不支持。

我们最终做的是:

  1. 创建一个简单的组件,它执行Thread.sleep(numberOfMillis),其中毫秒数在属性中定义。
  2. 在应该延迟处理的流程中,我们在从入站端点读取消息后添加了此组件作为第一步。

不是有史以来最好的解决方案,但它确实有效..

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2015-06-16
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多