Java 在发送到JMS队列之前提交消息

Java 在发送到JMS队列之前提交消息,java,transactions,jms,Java,Transactions,Jms,我在我的项目中有JMS队列实现,其中我在一个事务中发送100条消息,但在将其放入队列之前执行一些DB操作。i、 e //SuedoCode @Transactional(propagation = Propagation.REQUIRES_NEW) public void sendMsg(List orders ) { for(Order order : orders) { order.setStatus("SENT"); sendToQueue(order);

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

//SuedoCode

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

}
但此交易仍未提交,接收方在提交发送方交易之前提取订单。现在,接收方处理消息并再次更改状态,然后提交,但在此之后,发送方事务提交并覆盖不应发生的状态

因此,为了解决这个问题,我创建了一个新类(用于spring proxy),该类具有更改订单状态的方法,该方法处于REQUIRES\u new事务中,因此状态已更改,但如果在将消息发送到队列时发生任何错误,则状态需要再次更改(因为上一个事务已经提交)。 请告诉我这个方法是否正确,或者可以做些更好的事情。
提前感谢

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

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