RabbitMQ消息發佈之事務

事務的實現主要是對信道(Channel)的設置,主要分爲啓動事務、提交事務、回滾事務。其主要的方法有三個:

  1. channel.txSelect() 聲明啓動事務模式;
  2. channel.txComment() 提交事務;
  3. channel.txRollback() 回滾事務;

在發送消息之前,需要聲明channel爲事務模式,開啓事務後,客戶端和RabbitMQ之間的通訊交互流程:

  • 客戶端發送給服務器 tx.select (開啓事務模式)
  • 服務器端返回 tx.select-ok(開啓事務模式ok)
  • 推送消息
  • 客戶端發送給事務提交 tx.commit
  • 服務器端返回 tx.commit-ok

在這裏插入圖片描述

以上就完成了事務的交互流程,如果其中任意一個環節出現問題,就會拋出IOException異常,這樣用戶就可以攔截異常進行事務回滾,或決定要不要重複消息。


不過需要注意的是,一般我們很少會使用到RabbitMQ的事務,因爲AMQP協議層面雖然爲我們提供了事務機制,但是事務機制本身也會帶來問題:

  • 嚴重的性能問題
  • 使生產者應用程序產生同步

特別是其性能問題,根據相關資料,RabbitMQ事務會降低2~10倍的性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章