【问题标题】:Mule 4 - Empty VM queue error consuming messagesMule 4 - 空 VM 队列错误消耗消息
【发布时间】:2019-04-16 16:16:40
【问题描述】:

我在 Mule 4 中有一个流程,它从 CSV 文件中读取数据并使用 Batch 将其插入 Salesforce:

所有 Salesforce 结果都插入到非持久性 VM 队列(默认为瞬态)。

为每个记录块插入所有消息,并在批处理结束时毫无问题地使用。

但是,当我完成后,10 秒后出现以下错误:

Message               : Tried to consume messages from VM queue 'productQueue' but it was empty after timeout of 10 SECONDS.
Error type            : VM:EMPTY_QUEUE
Element               : testing-threadingSub_Flow/processors/0/processors/0 @ testing-threading:testing-threading.xml:95 (Consume)
Element XML           : <vm:consume doc:name="Consume" doc:id="6b7b2df6-c986-425c-a6f0-29613a876d37" config-ref="VM_Config" queueName="demoQueue" timeout="10"></vm:consume>

如果没有更多消息要处理,为什么队列的消费者会运行?

我希望这个组件只在轮到他时才读取消息。也许我使用了错误类型的虚拟机?

【问题讨论】:

    标签: batch-file queue timeout mule transient


    【解决方案1】:

    VM 消费操作将尝试从队列中读取直到指定的超时时间,该超时时间可配置,然后在队列为空时记录该错误。

    不知何故,您的 foreach 块执行消耗的次数超过了所需的可用数量/消息。如果您分享您的 foreach xml 配置,我们可能会了解更多原因。

    除了解决为什么 foreach 运行消耗过多之外。有几个选项可以修改此行为:

    将consume包装起来,尝试抑制错误:

     <try doc:name="Try" >
                    <vm:consume ... />
                    <error-handler >
                        <on-error-continue enableNotifications="false" logException="false" type=" ">
                            <logger  />
                        </on-error-continue>
                    </error-handler>
                </try>
    

    或者可能不使用消费,而是使用带有 VM 侦听器的不同流来侦听该 VM 队列上的消息。这可能会改变您的应用的工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2016-05-29
      相关资源
      最近更新 更多