1

我们想在我们的 Oracle DB 上使用一个表作为虚拟队列。应该使用 Apache Camel 使用 JPA 组件处理队列。每个条目都包含必须将有效负载转发到的 JMS 队列的名称。处理队列项目并将其转发给另一个消费者工作正常,但我在考虑当条目中命名的队列不存在时应该发生什么。这个想法是,当发生错误时,我们正在更新所述条目,以便我们在数据库中看到错误,并且忽略该条目以进行进一步处理,直到错误解决。我正在使用一些方法来处理异常,使用 spring-dsl 和一个处理器来为用于更新条目的 jpa 组件准备主体。

    <route id="db-to-jms">
        <from
            uri="jpa://foo.bar.jpa.QueueMessageOutEntity?delay=1000&amp;maximumResults=20&amp;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>

所以实际发生的是似乎正在尝试更新表,但它没有继续处理队列。我假设条目或其他东西上仍然有锁。无论如何,我很确定我做的不对,因为如果我理解正确,它会尝试删除该条目,假设它会继续按预期进行。

谢谢。

4

0 回答 0