Batch file Mule 4-使用消息时出现空VM队列错误

Batch file Mule 4-使用消息时出现空VM队列错误,batch-file,queue,timeout,mule,transient,Batch File,Queue,Timeout,Mule,Transient,我在Mule 4中有一个流,它从CSV文件读取数据,并使用批处理将其插入Salesforce: 所有Salesforce结果都插入到非持久性VM队列中(默认情况下为暂时性) 将为每个记录块插入所有消息,并在批处理结束时毫无问题地使用这些消息 但是,当我完成后,10秒后会出现以下错误: Message : Tried to consume messages from VM queue 'productQueue' but it was empty after time

我在Mule 4中有一个流,它从CSV文件读取数据,并使用批处理将其插入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>
Message:试图使用VM队列“productQueue”中的消息,但超时10秒后该队列为空。
错误类型:VM:空队列
元素:testing-threadingSub_Flow/processors/0/processors/0@testing-threading:testing-threading.xml:95(消耗)
元素XML:
如果没有更多消息要处理,为什么队列的使用者会运行?


我希望此组件仅在轮到他时读取消息。可能我使用了错误类型的VM?

VM consume操作将尝试从队列读取数据,直到指定的超时时间(可配置),然后在队列为空时记录该错误

不知何故,您的foreach块执行consume的次数超过了所需的可用数量/消息数。如果您与他人分享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>


或者,也可以不使用consume,而是使用不同的流和VM侦听器来侦听该VM队列上的消息。这可能会改变您的应用程序的工作方式。

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

不知何故,您的foreach块执行consume的次数超过了所需的可用数量/消息数。如果您与他人分享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>

或者,也可以不使用consume,而是使用不同的流和VM侦听器来侦听该VM队列上的消息。这可能会改变应用程序的工作方式