2014-03-04 165 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]的可能性,但这当然可以解决它:-) –