【问题标题】:Camel "Succesfull delivery acknowledgements"骆驼“成功交付确认”
【发布时间】:2014-04-05 00:09:14
【问题描述】:

我一直在尝试想出一条骆驼路线,可以从 activemq 读取并写入 Oracle AQ。

但是,当一条消息成功写入 Oracle-aq 时,我必须将一条成功的消息写入另一个 Active mq 队列(“类似于 id 41 的消息已发送到 OracleAQ”)

骆驼中是否有任何“自动确认”类型的功能可以在这里有用?

这是我从活动 mq 到 oracle aq 的基本路线。

<route>
    <from uri="jms:queue:Q.Customer1"/>
        <setHeader headerName="prop">
        <simple>header1Value</simple>
        </setHeader>
    <to uri="oracleQueue:queue:Q.Customer2"/>
</route>

【问题讨论】:

    标签: java oracle jms apache-camel activemq


    【解决方案1】:

    只需添加另一个 to 指向您希望骆驼在写入 oracle 后发布到的队列,如下所示:

    <onException>
        <exception>some.sql.Exception</exception>
        <to uri="some:error:handler:uri" /> <!-- like a bean or dead letter channel or whatever -->
    </onException>
    <route>
        <from uri="jms:queue:Q.Customer1"/>
        <setHeader headerName="prop">
            <simple>header1Value</simple>
        </setHeader>
        <to uri="oracleQueue:queue:Q.Customer2"/>
        <!-- this step will not be called until the previous one is finished  -->
        <to uri="jms:queue:SomeOtherQueue"/>
    </route>
    

    【讨论】:

    • 这并不意味着消息已成功写入 Oracle...对吗?...我只需要在消息成功写入 oracle aq 时将其写入不同的队列
    • 当您说“成功”写入时,您的意思是DB事务已完成并且记录存在于DB中吗?除非您并行执行此工作(您未根据路线定义),否则在当前步骤完成之前,Camel 不会进入下一步。因此,如果它成为&lt;to uri="jms:queue:SomeOtherQueue"/&gt;,则意味着该记录在数据库中。如果有可能出错,那么您为您的路线设置一个错误处理程序,所有失败的执行都将转到那里,而不是您的最终队列。希望这可以帮助。也更新了代码示例。
    • “Succesfull”表示,消息已到达 Oracle 队列。我不在乎甲骨文用它做什么。我只关心消息何时写入 Oracle。
    • 答案中的例子会做到。
    • 可以说,在第一个“to”期间出现错误或异常。已经完成了,但是在1中出现了错误。第二个“to”会发生吗?......谢谢回复......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2013-01-21
    • 2015-07-07
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多