【发布时间】: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