一、隊列
1)消費消息
-
通過AMQP的basic.consume命令訂閱。
-
通過AMQP的basic.get從隊列獲取單條消息。
-
隊列有多個消費者,則會採取循環(round-robin)的方式發給消費者。
-
消息必須確認:可以是通過AMQP的basic.ack顯式確認或者訂閱隊列時設置auto_ack爲true。
-
拒絕消息:可以通過AMQP的basic.reject消息或者消費者從RabbitMQ服務器斷開連接。reject的話存在兩種情況,requeue設置爲true,則發送給下個消費者,false則從隊列移除。
2)隊列創建
二、交換器與綁定
交換器可使用exchange.declare創建。
三、虛擬主機與隔離
vhost:實現隊列、交換器的隔離,並且有獨立的權限。
四、消息持久化
1)持久化條件
-
消息投遞模式必須爲持久(delivery mode 爲2)
-
發送到持久化交換器(durable爲true)非持久化的話,不會寫到日誌文件。
-
到達持久化隊列(durable爲true)非持久話的話,到達隊列將從持久化日誌移除。
2)AMQP事務
發送方確認模式:設置信道爲confirm模式,所有在信道上發佈的消息都會被指派一個唯一的ID,一旦消息被投遞到匹配的隊列後,信道會發送一個發送方確認模式給生產者引用程序,內包含消息ID。如果消息和隊列是持久化的,確認消息會在寫入磁盤後才發出。確認是異步的。
五、消息的整個過程
發送消息:連接到RabbitMQ—>獲取信道—>聲明交換器—>創建消息—>發佈消息—>關閉信道—>關閉連接
消費消息:連接到RabbitMQ—>獲取信道—>聲明交換器—>聲明隊列—>綁定交換器與隊列—>消費消息—>關閉信道—>關閉連接