关于AMQ中的事务

(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消耗),如果消息比较小,每次批量的数目可以多点,如果消息比较大,每次批量的数目应该小点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值