有些業務場景須要咱們對於消息的冪等性要求是比較高的,須要消息不能丟失,在使用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();