mzz*_*zzb 6 transactions jms message-queue
数据库事务是一个熟悉的概念.
try {
...
..
updateDB()
..
...
commit();
} catch error {
rollback();
}
Run Code Online (Sandbox Code Playgroud)
如果发生任何错误,则将丢弃updateDB所做的任何更改.
我想知道消息队列事务回滚将撤消什么.
try{
...
...
//EDIT: swapped the order of receive and send
Message m = queue1.receiveMessage(..)
..
..
queue2.sendMessage(..)
..
..
commit();
} catch error {
rollback();
}
Run Code Online (Sandbox Code Playgroud)
具体来说,回滚会做什么
或者我是将数据库tx拉得太过分了.
谢谢
编辑:我并不是暗示发送和接收操作是相关的.我只是想说有两个操作可以改变消息代理的状态 - 接收将从队列中取出一条消息,如果有的话,它将对其他消费者不可用.
Pet*_*der 10
回滚的发送是直接的,消息不会被放到queue2.
回滚接收通常会将消息放回队列(queue1).根据您的JMS提供程序设置和配置,将重新传递消息.如果事务回滚太多次(太多可配置),它将被置于"回退队列"(或死信队列),这样它就不会阻塞其他消息的队列.退出的消息通常需要一些手动错误处理.