【问题标题】:Is there a way to restrict the messages consumed from the IBM MQ in mule 4有没有办法限制在 mule 4 中从 IBM MQ 消耗的消息
【发布时间】:2023-03-15 00:38:01
【问题描述】:

我有一个需求,我将数据发布到 IBM MQ,并在晚上 10 点左右运行一个调度程序,该调度程序应该只使用那些在晚上 10 点之前发布的消息。晚上 10 点或之后发布的消息应该在第二天被挑选出来。

IBM MQ 中有没有一种方法可以根据日期时间过滤并使用它?有什么建议吗?

提前致谢。

【问题讨论】:

    标签: ibm-mq mulesoft mule4


    【解决方案1】:

    你真正想做的是使用这样的消息选择器:-

    Root.MQMD.PutDate = '20210924' AND Root.MQMD.PutTime < '22000000'
    

    但是,不幸的是,您可以对字符串使用的唯一运算符(并且这两个字段都是字符串字段)是 =&lt;&gt;(不等于)(请参阅 IBM MQ Docs: Message selector syntax)。

    或者,您可以使用 QLOAD,它可以根据时间选择消息,并通过将您应该处理的所有消息移动到另一个队列来预处理队列,然后允许您的应用程序在整个队列上工作.您可以按如下方式调用 QLOAD:-

    qload -m QM1 -i INPUT.Q -Tt22:00 -o APPL.INPUT.Q
    

    此命令将从名为 INPUT.Q 的队列中读取消息,并且只会将今天 22:00(晚上 10 点)之前放入的消息移动到名为 APPL.INPUT.Q 的队列中。

    当然,QLOAD 在这里没有做任何您无法写入自己的应用程序的事情。只需检查MQMD 中的PutDatePutTime 字段,并使用它们来决定是否处理消息。

    【讨论】:

      【解决方案2】:

      您可以尝试在侦听器中使用选择器表达式来按时间进行过滤。

      这是一个改编自documentation 的示例,说明如何使用选择器表达式:

      <flow name="JMSConnectorPublish">
        <jms:listener config-ref="JMS_Config" destination="in" selector="JMSPriority=9"/> 
      </flow>
      

      它不使用时间。您需要熟悉 IBM MQ/JMS 消息的标头和属性才能找到正确的表达式。您可能会对attributes.headers.JMSTimestamp 感兴趣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        相关资源
        最近更新 更多