全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:排他隊列

更新時間:Jun 30, 2024

如果您想建立一個只有自己可見的隊列,不允許其他使用者訪問,您可以使用雲訊息佇列 RabbitMQ 版的排他性隊列特性,將指定的隊列聲明為排他性。

什麼是排他隊列

排他性隊列的特點如下:

  • 排他隊列只對首次聲明它的串連(Connection)可見,包括該串連下所有建立的Channel。

    其他串連無法聲明相同名稱的排他隊列,且其他串連以及串連下的Channel都無法訪問該排他隊列。

  • 串連斷開時排他性隊列會被自動刪除。

    即使用戶端已聲明該排他隊列為持久性的(durabletrue),只要該排他性隊列的串連斷開,隊列會被自動刪除,且隊列中的資料也會被刪除。

適用情境

排他隊列適用於生產者和消費者在同一進程中,且對資料丟失不敏感的情境。

使用風險

因為排他隊列串連斷開隊列自動刪除的特性,以下情境串連意外斷開時,會導致隊列被刪除且資料被清理。

  • 用戶端程式調用Close()方法被關閉。

  • 服務端升級或異常重啟。

  • 串連心跳逾時導致串連空閑。

  • 其他錯誤導致串連被關閉,例如被限流等。

因此,您在使用排他隊列前請謹慎評估隊列可能被自動刪除的風險,並考慮隊列資料丟失的情境。

如何聲明排他隊列

排他隊列在用戶端程式中通過channel.queueDeclare方法聲明,將exclusive設定為true

以Java語言為例,聲明方式如下:

/**
* queue: 隊列名稱。
* durable: 是否持久化隊列。
* exclusive: 是否是排他隊列。
* autoDelete:是否自動刪除隊列。
* arguments: 其他參數。
*/
channel.queueDeclare("queueName", true, true, false, null);