Am建立了一个项目,其中必须一次完成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的连接并进行单独的提交。
答案 0 :(得分:1)
我没有完全看到您的问题。也许这只是使用哪种错误处理的问题。
设置:您有一个交易的JMS使用者的骆驼路线,并且在此路线中,您将多条消息发送到一个或不同的队列。
很好的情况:路由成功完成,并且所有JMS消息都已传递。
错误情况:如果您的路线遇到错误,则可以说在处理过程中,某些JMS消息已经“发送”,有些则没有。
在这种情况下,根本不发送任何消息,因为Camel进行了回滚并且尚未真正发送已经“发送”的JMS消息,或者更确切地说,还没有承诺,他们将不会承诺。
重要细节:骆驼不能处理错误。如果是这样,则错误不会传播到代理,因此将提交消耗的消息,JMS事务也会被提交。