Mule 4 - 消耗消息的空VM队列错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mule 4 - 消耗消息的空VM队列错误相关的知识,希望对你有一定的参考价值。

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

mule flow

所有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>

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

我希望这个组件只在轮到他时阅读消息。也许我正在使用错误的VM?

答案

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

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

除了解决为什么foreach运行消耗超过必要的。有几个选项可以修改此行为:

尝试将消耗包裹起来以抑制错误:

 <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队列上的消息。这可能会改变您的应用需要工作的方式。

以上是关于Mule 4 - 消耗消息的空VM队列错误的主要内容,如果未能解决你的问题,请参考以下文章

Mule请求响应VM的回滚异常策略

从 mule 中的队列/主题中读取消息

Mule 请求者正在使用 JMS 队列中的所有消息

如何在 Mule 4 中通过 ActiveMQ 传递属性

使用 Mule 重新排队 JMS 请求

寻找正确的 mule 组件以按 fifo 顺序解复用消息