【问题标题】:apache-camel put bulk messages into JMSapache-camel 将批量消息放入 JMS
【发布时间】:2019-10-12 18:07:25
【问题描述】:

我正在设置一个项目,其中 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 的连接并进行单独的提交。

【问题讨论】:

  • 因此,您想启动一个事务,发送多条消息,然后执行一次提交。对吗?
  • 是的,这正是我的要求。

标签: xml apache-camel jms


【解决方案1】:

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

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

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

错误情况:如果您的路由遇到错误,假设在处理过程中,有些 JMS 消息已经“发送”,有些还没有

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

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

【讨论】:

  • 第一个路由从队列 A 消费并创建多条消息并将它们推送到路由 B。是否有一个选项可以进行批量推送和提交;我还没准备好打开 x 个到 JMS 的连接并一一提交消息。
  • 啊,现在我明白了。多条消息的 JMS 发送与来自队列 A 的消息的消费不在同一个路由中。这里的问题是您希望将多个路由处理跨越到一个事务中。如果您要在同一条路线上执行此操作,它应该“正常工作”。
  • 不,等等。在编辑的问题中,您写“到队列 B”,在评论中,您写“到 Route B”。哪个是对的? :-)
  • 我交替使用它们。我正在尝试将其从队列 A 发送到队列 B。
  • Ups,抱歉@darius-x 这么久没有回答。我错过了你的问题。没有骆驼不会提交每条消息。只有当 consumed 消息被提交时,所有 produced 消息才会被保留和提交。当消费的消息回滚时,所有​​生产的消息也会回滚。 JMS 事务确保所有 JMS 事物仅在成功处理“源”消息(消费消息)时执行。
猜你喜欢
  • 2014-12-30
  • 2023-04-01
  • 2016-06-14
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 2013-12-23
  • 2019-05-04
  • 2018-03-19
相关资源
最近更新 更多