《RabbitMQ實戰》2.理解消息通信

一、隊列

1)消費消息

  • 通過AMQP的basic.consume命令訂閱。
  • 通過AMQP的basic.get從隊列獲取單條消息。
  • 隊列有多個消費者,則會採取循環(round-robin)的方式發給消費者。
  • 消息必須確認:可以是通過AMQP的basic.ack顯式確認或者訂閱隊列時設置auto_ack爲true。
  • 拒絕消息:可以通過AMQP的basic.reject消息或者消費者從RabbitMQ服務器斷開連接。reject的話存在兩種情況,requeue設置爲true,則發送給下個消費者,false則從隊列移除。

2)隊列創建

  • queue.declare創建隊列。
  • exclusive:true私有隊列。
  • auto-delete:最後一個消費者取消訂閱,則會自動刪除。
  • passive:true存在隊列,則直接返回,false存在隊列則異常。
 

二、交換器與綁定

        交換器可使用exchange.declare創建。
  • direct:路由key匹配。
  • fanout:發給綁定該交換機的所所有隊列。
  • topic:模糊匹配,允許不同key的消息進入相同隊列。
  • headers:匹配AMQP消息的header而非路由key,與direct一致。
 

三、虛擬主機與隔離

        vhost:實現隊列、交換器的隔離,並且有獨立的權限。
 

四、消息持久化

1)持久化條件

  • 消息投遞模式必須爲持久(delivery mode 爲2)
  • 發送到持久化交換器(durable爲true)非持久化的話,不會寫到日誌文件。
  • 到達持久化隊列(durable爲true)非持久話的話,到達隊列將從持久化日誌移除。

2)AMQP事務

        發送方確認模式:設置信道爲confirm模式,所有在信道上發佈的消息都會被指派一個唯一的ID,一旦消息被投遞到匹配的隊列後,信道會發送一個發送方確認模式給生產者引用程序,內包含消息ID。如果消息和隊列是持久化的,確認消息會在寫入磁盤後才發出。確認是異步的。 
 

五、消息的整個過程

發送消息:連接到RabbitMQ—>獲取信道—>聲明交換器—>創建消息—>發佈消息—>關閉信道—>關閉連接
消費消息:連接到RabbitMQ—>獲取信道—>聲明交換器—>聲明隊列—>綁定交換器與隊列—>消費消息—>關閉信道—>關閉連接
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章