1

我正在使用该node-amqp模块来管理rabbitmq 订阅。具体来说,我为每个用户/会话分配了一个独占/私有队列,并通过 REST 接口提供绑定方法。即“将我的队列绑定到这个exchange/routing_key 对”,以及“取消绑定我的队列到这个exchange/routing_key 对”。

这里的挑战是避免在内存中保留对队列对象的引用(例如,在具有模块范围的对象中)。

每次我需要它时简单地从连接中检索队列本身证明很困难,因为队列对象在内部保持绑定标签,可能是为了避免违反amqp 0.9.1 参考中的以下内容:

客户端不得尝试解除绑定不存在的队列。错误代码:未找到

我尝试使用 connect-mongo 将队列对象简单地设置为会话对象的属性,因为它在其属性上使用 JSON.stringify/JSON.parse。不幸的是,由于循环结构,队列对象无法“字符串化”。

从 node-amqp 模块持久化队列对象的最佳实践是什么?是否可以序列化/反序列化?

4

1 回答 1

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检索队列。

于 2014-03-10T06:33:26.647 回答