欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于AMQ中的事务 ActiveMQDT 

程序员文章站 2022-07-14 18:53:22
...
(1)、JMS事务和XA事务真正唯一的不同之处在于,XA事务中,在Prepare阶段,broker必须写所有接收到的命令(如:发消息或者应答消息)到持久化存储中,目的是broker以后能够正确的进行恢复操作。

(2)、【TransactionStore】事务存储进行事务处理,它会缓存所有的消息和应答,直到发生commit或者rollback操作;除了存储消息外,事务存储还会抑制消息的分发,直到session的commit命令发生。

(3)、采用事务后,发送消息或者应答消息的命令,实际上被缓存起来,直到commit和rollback命令发生,才会真正进行对应的操作,如:发送或者应答。

(4)、commit和callback命令需要在session调用,但是事务(提交或者回滚)是在broker端进行处理的。

(5)、【TransactionStore】实现了所有的持久化适配。

(6)、建议:JMS事务用在TextMessage上,以批量大小决定是否commit,比如每500个消息commit一次,前提每次commit前不能超过缓存的水位线。

(7)、文件切分成BypteMessage进行发送时,不能以一个文件为一个事务,因为文件大小是可变的,而缓存大小是固定的,超过水位线就会触发流控制发生,导致逻辑上的“deadlock”。

(8)、考虑下:为什么事务和批量发消息在一起?为了限制每次提交消息的大小(消息缓存时对jvm消耗),如果消息比较小,每次批量的数目可以多点,如果消息比较大,每次批量的数目应该小点。
相关标签: ActiveMQ DT