Просмотр конфигурации simpleLog
сервисная задача
<serviceTask id="simpleLog" name="simpleLog" flowable:async="true" flowable:exclusive="false" flowable:class="ar.com.telecom.st.pltesting.orquestador.delegates.loop.LogThread">
<multiInstanceLoopCharacteristics isSequential="false">
<loopCardinality>5</loopCardinality>
</multiInstanceLoopCharacteristics>
</serviceTask>
Имеет flowable:exclusive="false"
, это означает, что все (5) сервисные задачи будут выполняться параллельно. Когда их лог c будет завершен, все они продолжат работу и попытаются объединить мультиэкземпляр. Когда происходит слияние, все потоки будут пытаться обновить одну и ту же сущность. Только один из них будет успешным, и у вас будет 4 FlowableOptimisticLockingException
(один будет успешным).
После этого 4 снова повторится, что приведет к 3, генерирующему исключение, затем 3 попытается снова, приведя к 2, сгенерировавшему исключение и завершившемуся как тупиковые задания (я предполагаю, что это то, что происходит с вами).
В настоящее время единственный способ обойти это - использовать flowable:exclusive="true"
, который не является действительно параллельным, поскольку в любой момент времени выполняется только одна служебная задача.
Я бы предложил открыть проблема в Flowable средство отслеживания проблем , касающаяся этой проблемы. В этом случае мы можем добиться потенциального улучшения, чтобы ваши задания могли работать по-настоящему параллельно, но затем произошло объединение действий в другое асинхронное c эксклюзивное задание.