我正在使用node-amqp
模块来管理rabbitmq订阅。具体来说,我正在为每个用户/会话分配一个专用/私有队列,并通过REST接口提供绑定方法。即“将我的队列绑定到此exchange / routing_key对”,并“将我的队列解除绑定到此exchange / routing_key对”。
这里的挑战是避免在内存中保留对队列对象的引用(例如,在具有模块范围的对象中)。
每次我需要时,只需从连接中检索队列本身就很困难,因为队列对象会在内部监视绑定,可能是为了避免违反the amqp 0.9.1 reference中的以下内容:
客户端绝不能尝试取消绑定不存在的队列。错误代码:未找到
我尝试使用connect-mongo将队列对象设置为会话对象的属性,因为它在其属性上使用JSON.stringify / JSON.parse。不幸的是,由于循环结构,队列对象无法“字符串化”。
从node-amqp模块中保留队列对象的最佳做法是什么?是否可以序列化/反序列化?
答案 0 :(得分: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检索队列。