数据库事务是一个熟悉的概念。
try {
...
..
updateDB()
..
...
commit();
} catch error {
rollback();
}
如果发生任何错误,updateDB 所做的任何更改都将被丢弃。
我想知道消息队列事务回滚将撤消什么。
try{
...
...
//EDIT: swapped the order of receive and send
Message m = queue1.receiveMessage(..)
..
..
queue2.sendMessage(..)
..
..
commit();
} catch error {
rollback();
}
具体来说,回滚会做什么
- 取消发送消息
- 取消接收消息,即将收到的消息放回队列
还是我将数据库 tx 类比延伸得太远了。
谢谢
编辑:我并不是暗示发送和接收操作是相关的。我只想说有两个操作可以改变消息代理的状态——receive 将从队列中取出一条消息,如果有的话,其他消费者将无法使用该消息。