哪个消息队列可以处理在用户断开连接后存在的专用队列?

时间:2011-09-22 07:05:39

标签: message-queue rabbitmq amqp

我对需要消息队列的系统有一些要求:

  1. 订阅者应获得个人队列。
  2. 当用户断开连接时,不得删除各个队列
  3. 如果订户失去连接,订户应能够重新连接到自己的队列
  4. 只有订阅者才能使用分配给它的队列
  5. 很高兴:队列在服务器重启后仍然存在
  6. RabbitMQ可以用来实现这个,在这种情况下如何实现?

1 个答案:

答案 0 :(得分:7)

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

2)这几乎是标准的。如果您声明一个队列,那么它将保留在交换中,如果它被设置为持久,那么它将在代理重新启动后继续存在。在任何情况下,您的订户都应该在启动时调用queue.Declare()以确保队列存在,但是在订户断开连接的情况下,队列将保留。

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

4)我还没有真正钻研过Rabbit的安全方面。可能有一种方法可以保护个别队列,但我会让别人对此发表评论,因为我不是权威。

5)见(2)。如果设置为持久性消息,则消息也将在重新启动后继续存在,然后将其写入磁盘。由于存在磁盘I / O,这会导致性能下降,但这正是您所期望的。

所以基本上,是的。兔子可以按照你的要求去做。就“如何”而言,存在不同程度的“如何”。如果您在实施上述任何方面时遇到困难,请尽快为您提供代码级答案。与此同时,如果您还没有这样做,我建议您阅读以下文档: http://www.rabbitmq.com/documentation.html

HTH。史蒂夫