我们想在我们的 Oracle DB 上使用一个表作为虚拟队列。应该使用 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>
所以实际发生的是似乎正在尝试更新表,但它没有继续处理队列。我假设条目或其他东西上仍然有锁。无论如何,我很确定我做的不对,因为如果我理解正确,它会尝试删除该条目,假设它会继续按预期进行。
谢谢。