2011-09-22 46 views
0

我有需要的消息队列的系统的一些要求:哪个消息队列可以处理用户断开连接后的专用队列?

  1. 的用户应获得个人队列。当用户断开
  2. 的用户将能够重新连接到自己的队列,如果它失去连接
  3. 只有订户将能够使用分配给它
  4. 队列
  5. 各个队列不得删除
  6. 很高兴有:队列服务器重新启动

可以用RabbitMQ来实现这一点,在这种情况下如何?

回答

7

我最近才开始使用兔子,但我相信你的要求可以很容易地解决。 1)我已经通过让订阅者使用其机器名作为队列名称的一部分声明队列(以及相关的路由键)来为单个订阅者实现特定的队列。交换机通过绑定/路由密钥来适当地路由消息。就我而言,所有订阅者都会获得发布者发布的相同消息的副本,并且任意数量的订阅者可以声明他们自己的队列并开始接收消息。

2)这是非常标准的。如果您申报了一个队列,那么它将保留在交易所中,并且如果它被设置为耐用,那么它将在代理重新启动后继续存在。无论如何,你的用户应该在启动时调用queue.Declare()以确保队列存在,但就用户断开连接而言,队列将保持不变。

3)如果队列在那里,并且用户正在按名称监听队列,那么没有理由不能重新连接。

4)我还没有真正钻研兔子的安全方面。虽然我会让其他人评论这一点,但我可能有保障个人排队的方法,因为我没有权威。 5)参见(2)。如果将消息设置为持久,然后将消息写入磁盘,则消息也将在重新启动后存活。由于有磁盘I/O,这会导致性能损失,但这与您所期望的类似。

所以基本上是的。兔子可以照你的要求做。就“如何”而言,“如何”程度有所不同。如果您在执行上述任何操作时遇到困难,请高兴地尝试为您提供代码级别的答案。与此同时,如果您还没有这样做,我建议您阅读文档: http://www.rabbitmq.com/documentation.html

HTH。史蒂夫

+0

现货。优秀的答案。 –

+0

另外,近来在提高RabbitMQ处理持久消息和平稳重启能力方面进行了大量工作。不要在操作系统的存储库中使用RabbitMQ。相反,从rabbitmq.com获取.deb或.rpm文件。另外,如果可以,请安装Erlang R14b3或R15B,而不是依赖Linux存储库中过时的版本。 –