首页 > 解决方案 > RabbitMQ - 内存使用和消息持久性

问题描述

我对 RabbitMQ 和 AMQP 完全陌生,我正在寻找与队列、消息持久性和内存使用相关的解决方案。

我正在尝试在服务和多个客户端之间建立消息传递系统。所说的客户基本上是在手机上使用应用程序的人,所以我的第一个想法是创建:

在阅读了选择性消费者模式(1 个队列,多个消费者)在 RabbitMQ 中似乎是一种不好的做法后,做出了这个决定。

但是我发现创建的每个队列都需要内存,并且考虑到我需要声明数千个队列(每个用户 1 个),它需要大量内存,所以这绝对不是我的情况的解决方案。

所以我想知道是否有可能,例如,在用户离线时保持队列“禁用”并在它上线后“启用”它?这样我就可以在不保持队列活动的情况下实现消息持久性(即不消耗资源)。还是我的方法完全错误?

标签: rabbitmqamqp

解决方案


我想 rabbitmq.com/lazy-queues.html 可以成为你的一个选择,它会消耗更少的 RAM。

您可以采取的第二种方法是使用https://www.rabbitmq.com/ae.html进行交换:

  1. 添加所有未路由消息的替代交换(所有离线用户的消息)
  2. 使用此交换中的所有消息并存储在某处(缓存,数据库)
  3. 在用户离线后立即删除用户的队列,
  4. 用户上线后,发送所有以前收集的消息并声明一个新队列。

在这种情况下,您将为在线用户保留队列,但您需要将所有消息存储在某处以供离线用户使用


推荐阅读