【问题标题】:Commit message before sending in JMS queue在 JMS 队列中发送之前提交消息
【发布时间】:2016-04-24 10:32:48
【问题描述】:

我的项目中有 JMS 队列实现,其中我在一个事务中发送 100 条消息,但在将其放入队列之前执行一些数据库操作。即

//SuedoCode

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void sendMsg(List orders )
{
   for(Order order : orders)
  {
    order.setStatus("SENT");
    sendToQueue(order);
   }

}

但是这个交易仍然没有被提交,并且接收者在发送者的交易被提交之前拿起了订单。现在接收者处理消息并再次更改状态然后提交,但在发送者事务提交之后它会覆盖不应该发生的状态。

因此,为了解决这个问题,我创建了一个新类(用于 spring 代理),它具有更改订单状态的方法,此方法在 REQUIRES_NEW 事务中,因此状态已更改,但如果有任何错误在将消息发送到队列时发生,然后再次需要更改状态(因为先前的事务已经提交)。 请建议我如果这种方法是正确的或者可以做更好的事情。 提前致谢

【问题讨论】:

    标签: java transactions jms


    【解决方案1】:

    排队的消息需要是同一事务的一部分,以便立即提交所有内容。

    缺少这一点,另一种解决方案是将更新的订单存储在列表中,并在您确定事务已提交且数据库已更新后立即在此方法之外调用 sendToQueue。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2016-05-02
      • 2015-12-03
      • 2011-01-25
      • 2013-08-08
      • 2015-08-25
      • 1970-01-01
      • 2020-04-05
      • 2014-03-29
      相关资源
      最近更新 更多