2014-03-04 166 views
1

我正在使用node-amqp模塊來管理rabbitmq訂閱。具體來說,我爲每個用戶/會話分配一個排他/專用隊列,並通過REST接口提供綁定方法。即「將我的隊列綁定到此交換/路由密鑰對」,以及「將我的隊列解除綁定到此交換/路由密鑰對」。持久隊列:序列化/反序列化node-amqp中的隊列對象

這裏面臨的挑戰是避免在內存中保留對隊列對象的引用(比如,在模塊範圍內的對象中)。

每次我需要它只需檢索隊列本身的連接,難度相當大,因爲隊列對象保持標籤上綁定內部,可能避免違反從the amqp 0.9.1 reference如下:

客戶MUST NOT嘗試解除不存在的隊列的綁定。錯誤代碼:未找到

我試圖使用connect-mongo簡單地將隊列對象設置爲會話對象上的屬性,因爲它在其屬性上使用JSON.stringify/JSON.parse。不幸的是,由於循環結構,隊列對象無法「串化」。

持久化node-amqp模塊的隊列對象的最佳做法是什麼?是否有可能序列化/反序列化?

回答

0

我不會嘗試存儲隊列對象,而不是使用可以存儲的隊列的唯一名稱。之後,每當你想在隊列中,使操作你有兩個選擇:

  • 在這種情況下你有一個以前打開「通道」的隊列中,你應該能夠做到:

    queue = connection.queues[name]. 
    

    我的意思是連接作爲rabbitMQ的node-amqp連接。

  • 在你沒有在你的RabbitMQ連接的通道打開的情況下,只需再次打開通道:

    connection.queue(name = queueName, options, function(queue) { 
        // for example do unbind 
    }) 
    

我也使用REST接口來管理的RabbitMQ。我的連接對象維護着所有的隊列,通道等......所以,只有第一次嘗試使用我調用connection.queue的隊列時,以下請求只是通過connection.queues檢索隊列。

+0

謝謝。這個答案的相關部分是第一部分,因爲我在原始問題中已經解釋了第二部分的問題。 我沒有意識到使用connection.queues [name]的可能性,但這當然可以解決它:-) –