数据库事务是一个熟悉的概念。
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();
}
具体来说,回滚会做什么
- 取消消息的发送
- 取消接收消息,即放回收到的消息
消息返回队列
或者我是否把数据库交易的类比延伸得太远了。
thanks
EDIT:我并不是暗示发送和接收操作是相关的。我只是想说有两个操作可以改变消息代理的状态——接收将从队列中取出一条消息,如果有的话,其他消费者将无法使用该消息。
发送的回滚是直接进行的,消息不会被放入队列2。
接收回滚通常会将消息放回队列 (queue1)。
根据您的 JMS 提供程序设置和配置,消息将被重新传送多次。如果事务回滚次数过多(可配置次数过多),它将被放入“回滚队列”(或死信队列)中,这样就不会阻塞队列中的其他消息。撤消的消息通常需要一些手动错误处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)