如果您想建立一個只有自己可見的隊列,不允許其他使用者訪問,您可以使用雲訊息佇列 RabbitMQ 版的排他性隊列特性,將指定的隊列聲明為排他性。
什麼是排他隊列
排他性隊列的特點如下:
排他隊列只對首次聲明它的串連(Connection)可見,包括該串連下所有建立的Channel。
其他串連無法聲明相同名稱的排他隊列,且其他串連以及串連下的Channel都無法訪問該排他隊列。
串連斷開時排他性隊列會被自動刪除。
即使用戶端已聲明該排他隊列為持久性的(
durable
為true
),只要該排他性隊列的串連斷開,隊列會被自動刪除,且隊列中的資料也會被刪除。
適用情境
排他隊列適用於生產者和消費者在同一進程中,且對資料丟失不敏感的情境。
使用風險
因為排他隊列串連斷開隊列自動刪除的特性,以下情境串連意外斷開時,會導致隊列被刪除且資料被清理。
用戶端程式調用
Close()
方法被關閉。服務端升級或異常重啟。
串連心跳逾時導致串連空閑。
其他錯誤導致串連被關閉,例如被限流等。
因此,您在使用排他隊列前請謹慎評估隊列可能被自動刪除的風險,並考慮隊列資料丟失的情境。
如何聲明排他隊列
排他隊列在用戶端程式中通過channel.queueDeclare
方法聲明,將exclusive
設定為true
。
以Java語言為例,聲明方式如下:
/**
* queue: 隊列名稱。
* durable: 是否持久化隊列。
* exclusive: 是否是排他隊列。
* autoDelete:是否自動刪除隊列。
* arguments: 其他參數。
*/
channel.queueDeclare("queueName", true, true, false, null);