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

时间:2019-04-16 16:16:40

标签: batch-file queue timeout mule transient

我在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?

1 个答案:

答案 0 :(得分:2)

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