【问题标题】:JmsTemplate batch issueJmsTemplate 批处理问题
【发布时间】:2017-04-29 21:21:35
【问题描述】:

我当前的用例在我的监听器中:

  1. 从队列中消费一个事件(我们称之为原始事件),该事件包括重播事件列表(我们称之为子事件)。
  2. 将这些重播事件(子事件)批量生成到其他队列。
  3. 更新 Cassandra。

我可以根据 Gary 提到的内容生成所有重播事件,如果在生成过程中发生任何异常,我可以回滚所有重播事件。

使用带有 ProducerCallback 的执行方法之一...

SessionCallback and ProducerCallback

然后,在您的 ProducerCallback.doInJms() 方法中...

使用生产者发送多条消息。当回调退出时, 事务将被提交。

但是,如果在步骤 3 中发生任何异常,我们只能回滚 原始事件,而不能回滚那些 重播事件,因为在步骤 2 中我们已经提交了这些重播回调退出后的事件,并且那些重播事件已经在另一个队列中并且不能回滚。

如果第 3 步出现异常,是否有人对我们如何回滚所有内容有更好的想法?

【问题讨论】:

    标签: java jms spring-jms


    【解决方案1】:

    您必须在同一会话中完成所有操作;消费,生产......,cassandra。

    全部在doInJms()...

    • session.createConsumer()

    试试{

    • consumer.receive()
    • 生产者发送() ...
    • cassandra 更新

    终于{

    • consumer.close()

    }

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多