gpt4 book ai didi

transactions - JMS 事务

转载 作者:行者123 更新时间:2023-12-04 04:51:51 28 4
gpt4 key购买 nike

数据库事务是一个熟悉的概念。

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 类比延伸得太远了。

    谢谢

    编辑:我并不是暗示发送和接收操作是相关的。我只是想说有两个操作可以改变消息代理的状态——接收将从队列中取出一条消息,如果有的话,其他消费者将无法使用该消息。

    最佳答案

    发送回滚是直接的,消息不会被放入 queue2。

    接收回滚通常会将消息放回队列(queue1)。
    根据您的 JMS 提供程序设置和配置,消息将被重新传递多次。如果事务回滚太多次(太多是可配置的),它将被放入“回退队列”(或死信队列),这样它就不会阻塞其他消息的队列。回退的消息通常需要一些手动错误处理。

    关于transactions - JMS 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13890287/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com