rabbitmq内存节点里面的消息可以持久化吗?
先跟各位大佬问个好。
最近在研究rabbitmq的集群。rabbitmq集群中有磁盘节点和内存节点,其中的区别就是内存节点的元数据都放在内存中,磁盘节点的元数据放在磁盘中。
有几个问题不理解,请大佬们指导一下。
1.内存节点是从磁盘节点拉取的元数据。那么磁盘节点里面的队列和交换器元数据,必须是持久化的吗?(即创建队列和交换器时,必须声明为持久化的吗??)
2.内存节点的消息是存储在哪里的,是不是只能存储在内存中?这些消息能持久化吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
自己答一波~
搭建了一个磁盘节点,一个内存节点的集群。
1.在磁盘节点声明了非持久化的队列和交换器,重启之后队列和交换器消失了。正常来说,持久化是生产环境必须做的操作,而不是磁盘节点默认实现的功能。
2.在内存节点声明队列并发布消息之后,然后重启内存节点,重启之后队列的内容仍然存在。
故
1.磁盘节点可以声明持久化或者是非持久化,但是生产环境正常要持久化的。
2.内存节点的消息是可以持久化的。
顺便加深了理解: 内存节点,除了磁盘节点的地址外,其他元数据都放在内存中。重启之后会从磁盘节点下载元数据。注意是元数据。
关于第二条,我觉得不应该这么说。内存节点应该是没有持久化的,持久化设置是一个队列行为。
内存节点必须存在集群结构中,在磁盘和内存节点组成集群时,通过客户端向集群发送消息,不管指定的是哪个节点地址,只要队列消息是持久化的,都会先将消息持久化到 磁盘节点,然后给 客户端回送接收成功确认。