AMQP / RabbitMQ - 仅实时消息/直通队列

时间:2016-05-29 09:50:54

标签: rabbitmq amqp

我正在建立一个网站,接收有关足球比赛的实时更新。我正在使用RabbitMQ将更新发送给客户端(JS网站和Android / iOS应用程序)。

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

为了实现这种行为,我考虑了以下架构:

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

这是正确使用AMQP / RabbitMQ来实现实时通知吗?

1 个答案:

答案 0 :(得分: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从交换机转发到队列。