我们希望在Oracle DB上使用表作为虚拟队列。应使用JPA组件使用Apache Camel处理队列。每个条目都包含有效负载必须转发到的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>
所以实际发生的事情似乎是尝试更新表,但它不会继续处理队列。 我假设条目还有锁定或其他东西。无论如何,我很确定我做得不对,因为如果我理解正确,它会尝试删除该条目,假设它会继续,因为它应该。
感谢。