1. 程式人生 > >RabbitMQ實戰篇4-佇列(queue)

RabbitMQ實戰篇4-佇列(queue)

佇列在宣告(declare)後才能被使用。如果一個佇列尚不存在,宣告一個佇列會建立它。如果宣告的佇列已經存在,並且屬性完全相同,那麼此次宣告不會對原有佇列產生任何影響。如果宣告中的屬性與已存佇列的屬性存在差異,那麼一個錯誤程式碼為406的通道級異常就會被丟擲。

佇列的屬性

佇列中儲存著即將被消費掉的資訊,它有如下屬性:

1、名稱
2、永續性(訊息代理重啟後,佇列依舊存在)
3、獨享(只被一個連線(connection)使用,而且當連線關閉後佇列即被刪除)
4、自動刪除(當最後一個消費者退訂後即被刪除)

5、其他引數:(訊息代理用他來完成類似與TTL的某些額外功能)

佇列名稱

應用(application)可以為佇列取一個名字,或者讓訊息代理(broker)直接生成一個名字給佇列。佇列的名字可以是最多255位元組的一個utf-8字串。若希望AMQP訊息代理生成佇列名,需要給佇列的name引數賦值一個空字串:在同一個通道(channel)的後續的方法(method)中,我們可以使用空字串來表示之前生成的佇列名稱。之所以之後的方法可以獲取正確的佇列名是因為通道可以默默地記住訊息代理最後一次生成的佇列名稱。

以"amq."開始的佇列名稱被預留做訊息代理內部使用。如果試圖在佇列宣告時打破這一規則的話,一個通道級的403 (ACCESS_REFUSED)錯誤會被丟擲。

Queue Durability 佇列持久化

持久化佇列(Durable queues)會被儲存在硬碟上,當訊息代理(broker)重啟的時候,它依舊存在。沒有被持久化的佇列稱作暫存佇列(Transient queues)。並不是所有的場景和案例都需要將佇列持久化。

持久化的佇列並不會使得路由到它的訊息也具有永續性。倘若訊息代理掛掉了,重新啟動,那麼在重啟的過程中持久化佇列會被重新宣告,無論怎樣,只有經過持久化的訊息才能被重新恢復。

回到目錄