有些业务场景须要咱们对于消息的幂等性要求是比较高的,须要消息不能丢失,在使用RabbitMQ的时候,咱们能够经过消息持久化操做来解决由于服务器的异常奔溃致使的消息丢失,除此以外咱们还会遇到一个问题,当消息的发布者在将消息发送出去以后,消息到底有没有正确到达broker代理服务器呢?若是不进行特殊配置的话,默认状况下发布操做是不会返回任何信息给生产者的,也就是默认状况下咱们的生产者是不知道消息有没有正确到达broker的,若是在消息到达broker以前已经丢失的话,持久化操做也解决不了这个问题,由于消息根本就没到达代理服务器,你怎么进行持久化,那么这个问题该怎么解决呢?服务器
RabbitMQ为咱们提供了两种方式:性能
事务机制
这里首先探讨下RabbitMQ事务机制。spa
RabbitMQ中与事务机制有关的方法有三个:代理
在经过txSelect开启事务以后,咱们即可以发布消息给broker代理服务器了,若是txCommit提交成功了,则消息必定到达了broker了,若是在txCommit执行以前broker异常崩溃或者因为其余缘由抛出异常,这个时候咱们即可以捕获异常经过txRollback回滚事务了code
1 channel.txSelect(); 2 channel.basicPublish(ConfirmConfig.exchangeName, ConfirmConfig.routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, ConfirmConfig.msg_10B.getBytes()); 3 channel.txCommit();