Mule 4 - пустые сообщения об ошибках очереди VM - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть поток в Mule 4, который читает данные из CSV-файла и вставляет их в Salesforce, используя Batch:

mule flow

Все результаты Salesforce вставляются в непостоянную очередь виртуальных машин (переходный по умолчанию).

Все сообщения вставляются для каждого блока записей и потребляются без проблем в конце пакета.

Однако, когда я закончу, через 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>

Почему потребитель очереди запускается, если больше нет сообщений для обработки?

Я хочу, чтобы этот компонент читал сообщения только в его очередь. Может я использую не тот тип ВМ?

1 Ответ

2 голосов
/ 21 апреля 2019

Операция потребления виртуальной машины будет пытаться прочитать из очереди до заданного времени ожидания, которое можно настроить, и затем зарегистрирует эту ошибку, если очередь пуста.

Каким-то образом ваш блок 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.Это может изменить работу вашего приложения.

...