首页 > 解决方案 > apache-camel 将批量消息放入 JMS

问题描述

我正在建立一个项目,其中必须一次性完成 JMS 的批量提交。使用事务重新启动消息处理,因此需要考虑如何将“x”个消息推送到 JMS 队列并执行 JMS 提交。

目前正在做的是创建一个 JMS 消息,其中一个长字符串附加了我希望一次性提交的消息。然后使用拆分器将消息拆分为另一个路由中的多个。最后,使用另一个路由将消息发送到 JMS(作为批量提交)。

    <route>
        <from uri="file:sample"/>
        <split streaming="true">
            <tokenize token="\n"/>
            <to uri="activemq:queue:dest"/>
        </split>
    </route>

我希望构建一个控制何时发出 JMS 提交的路由。

用例正在尝试从队列 A 中读取消息并创建许多消息(让该数字为“x”)。并将它们推送到队列 B。但是,我希望像 DB 一样进行批量提交(或批量提交)。我试图高效地不创建与 JMS 的连接并进行单独的提交。

标签: xmlapache-cameljms

解决方案


我没有完全看到你的问题。也许这只是使用什么错误处理的问题。

设置:您有一个带有事务处理 JMS 消费者的 Camel 路由,并且在此路由中,您将多条消息发送到一个或不同的队列

好案例:路由成功完成,所有JMS消息都送达。

错误案例:如果你的路由遇到错误,比如说在处理的过程中,有些 JMS 消息已经“发送”了,有些还没有

在这种情况下,根本不会发送任何消息,因为 Camel 进行了回滚,并且已经“发送”的 JMS 消息并没有真正发送,或者更准确地说,它们还没有提交,也不会被提交。

重要细节:骆驼不能处理错误。如果是这样,则错误不会传播到代理,因此所使用的消息将被提交,JMS 事务也是如此。


推荐阅读