2016-05-29 93 views
3

我正在建立一个网站,该网站接收关于足球比赛的实时更新。我正在使用RabbitMQ将更新发送到客户端(JS网站和Android/iOS应用程序)。AMQP/RabbitMQ - 只有实时消息/传递队列

客户端应该只接收实时更新。换句话说,客户端只应在用户登录时接收更新。不保存历史记录。

为了实现这种行为,我在想下面的架构:

  • 在RabbitMQ的扇出交换。
  • 每个用户都有一个专用队列,绑定到交换机。该队列在创建用户帐户时创建。
  • 对于这些队列,设置值为0的队列属性x-message-ttl。见下文。
  • 当用户登录时,客户端将消耗相应用户的队列。
  • 消息由后端发送到交换机,并转发到所有队列。当用户没有登录,消息会被立即丢弃,因为x-message-ttl设置为0

这是AMQP的正确用法/ RabbitMQ的,以实现实时通知?

回答

2

是和否 - 你的一些前提是错误的。

  • In other words, a client should only receive updates when the user is logged in.当用户没有登录时,只需将连接放到RMQ即可。
  • Each user has a dedicated queue, which is bound to the exchange. This queue is created when the user account is created.只有在建立与RMQ的连接后,才应该创建队列,这样您还可以覆盖When a user is not logged in, the message will be discarded immediately部件。
  • 无需将TTL设置为0.
  • Messages are sent to the exchange by the backend, and forwarded to all queues要说清楚的是,它是从交换到队列“转发”的RabbitMQ。
+0

如果队列是在登录后创建的,那么这是否意味着队列应该声明为“auto-delable”? –

+0

登录是指登录到您的网站或登录 - 建立与RMQ的连接?如果您不希望用户登录(从网站/ web应用程序)登录时错过的消息,而不是自动删除。 – cantSleepNow

+0

谢谢,现在明白了。我不明白队列是要在运行中创建/删除的。我认为队列应该或多或少是静态的。我会试试看。 –