ActiveMQ--事务、签收

ActiveMQ的事务

生产者事务:

事务在connection.createSession(false, Session.AUTO_ACKNOWLEDGE);中设置。

  • false:

    • 只要执行send(),就进入到消息队列
    • 关闭事务,那么第二个签收参数的设置需要有效。
  • true:

    • 先执行send()再执行session.commit(),消息才被真正提交到队列中。
    • 消息需要批量发送,需要缓冲区处理。
    • 如果事务失败,可以执行session.rollback()回滚事务

消费者事务:

  • false: 一条一条消费,消费一条少一条
  • true: 以事务为单位消费,注意:一定要记得commit(),否则会出现消息的重复消费问题!

签收(ACKNOWLEDGE)

  • 非事务签收

    • 自动签收(默认)AUTO_ACKNOWLEDGE:
      在这里插入图片描述

    • 手动签收 CLIENT_ACKNOWLEDGE:客户端调用acknowledge()方法手动签收
      在这里插入图片描述
      需要消费者手动签收:
      在这里插入图片描述
      如果不进行手动签收,会发生消息重复消费的问题!

    • 允许重复消息 DUPS_OK_ACKNOWLEDGE:

  • 事务级签收
    在事务开启的状态下,只有session.commit()后才能将全部消息变为已消费。如果不进行commit(),采用手动签收的方式,消息依然不会签收,会发生消息重复消费的问题。

事务和签收的关系:

在事务性会话中,当一个事务被成功提交则消息被自动签收。如果事务回滚,则消息会被再次传送。

非事务性会话中,消息何时被确认取决于创建会话时的应答模式(ACKNOWLEDGE)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值