rabbitmq - RabbitMQ - 内存使用和消息持久性
问题描述
我对 RabbitMQ 和 AMQP 完全陌生,我正在寻找与队列、消息持久性和内存使用相关的解决方案。
我正在尝试在服务和多个客户端之间建立消息传递系统。所说的客户基本上是在手机上使用应用程序的人,所以我的第一个想法是创建:
- 1直接交换
- 1 个持久队列 +每个用户的相关绑定
在阅读了选择性消费者模式(1 个队列,多个消费者)在 RabbitMQ 中似乎是一种不好的做法后,做出了这个决定。
但是我发现创建的每个队列都需要内存,并且考虑到我需要声明数千个队列(每个用户 1 个),它需要大量内存,所以这绝对不是我的情况的解决方案。
所以我想知道是否有可能,例如,在用户离线时保持队列“禁用”并在它上线后“启用”它?这样我就可以在不保持队列活动的情况下实现消息持久性(即不消耗资源)。还是我的方法完全错误?
解决方案
我想 rabbitmq.com/lazy-queues.html 可以成为你的一个选择,它会消耗更少的 RAM。
您可以采取的第二种方法是使用https://www.rabbitmq.com/ae.html进行交换:
- 添加所有未路由消息的替代交换(所有离线用户的消息)
- 使用此交换中的所有消息并存储在某处(缓存,数据库)
- 在用户离线后立即删除用户的队列,
- 用户上线后,发送所有以前收集的消息并声明一个新队列。
在这种情况下,您将为在线用户保留队列,但您需要将所有消息存储在某处以供离线用户使用
推荐阅读
- javascript - 当 redux 状态已通过成功操作更新时,React 组件不刷新
- android - 测试编排器示例
- python - Node js 中的 Rest Api 请求(curl 到 Node.js,python 到 Node.js)
- javascript - 如何查看按钮输入是否与数组中的值匹配?
- c# - 使用 Docusign API 上传文档并设置签名
- amazon-web-services - AWS 粘合增量负载
- python-3.x - 删除多个工作表上的空值并导出到 excel
- java - 我将如何打印出每行的第一个单词?
- javascript - 当我在画布上移动鼠标时,Chart Js 闪烁或切换
- java - Java解析字符串错误:线程“main”java.util.NoSuchElementException中的异常