Camel - извлечение записи из базы данных Oracle через компонент JPA и обновление указанной записи в случае исключения
Мы хотим использовать таблицу в качестве виртуальной очереди в нашей базе данных Oracle. Очередь должна обрабатываться с помощью Apache Camel с использованием компонента JPA. Каждая запись содержит имя очереди JMS, в которую необходимо переслать полезную нагрузку. Обработка элемента очереди и пересылка его другому потребителю работает нормально, но я думал о том, что должно произойти, когда очередь, имя которой указано в записи, не существует. Идея состоит в том, что при возникновении ошибки мы обновляем указанную запись, поэтому видим ошибку в базе данных, и эта запись игнорируется для дальнейшей обработки, пока ошибка не будет устранена. Я играл с некоторыми способами обработки исключений, используя spring-dsl и процессор для подготовки тела для jpa-компонента, используемого для обновления записи.
<route id="db-to-jms">
<from
uri="jpa://foo.bar.jpa.QueueMessageOutEntity?delay=1000&maximumResults=20&namedQuery=orderedByPriority" />
<doTry>
<process ref="queueMessageOutProcessor" />
<recipientList>
<simple>direct:${header.queueName}</simple>
</recipientList>
<doCatch>
<exception>org.apache.camel.component.direct.DirectConsumerNotAvailableException</exception>
<handled><constant>true</constant></handled>
<process ref="queueMessageOutErrorHandler" />
<to uri="jpa://foo.bar.jpa.QueueMessageOutEntity" />
</doCatch>
</doTry>
</route>
Так что в действительности происходит попытка обновить таблицу, но она не продолжает обрабатывать очередь. Я предполагаю, что на входе все еще есть замок или что-то еще. В любом случае, я почти уверен, что делаю это неправильно, потому что, если я правильно понимаю, он все равно попытается удалить запись, предполагая, что она будет продолжаться, как и предполагалось.
Благодарю.