rabbitmq内存节点里面的消息可以持久化吗?

先跟各位大佬问个好。
最近在研究rabbitmq的集群。rabbitmq集群中有磁盘节点和内存节点,其中的区别就是内存节点的元数据都放在内存中,磁盘节点的元数据放在磁盘中。

有几个问题不理解,请大佬们指导一下。
1.内存节点是从磁盘节点拉取的元数据。那么磁盘节点里面的队列和交换器元数据,必须是持久化的吗?(即创建队列和交换器时,必须声明为持久化的吗??)
2.内存节点的消息是存储在哪里的,是不是只能存储在内存中?这些消息能持久化吗

阅读 4.6k
2 个回答

自己答一波~
搭建了一个磁盘节点,一个内存节点的集群。
1.在磁盘节点声明了非持久化的队列和交换器,重启之后队列和交换器消失了。正常来说,持久化是生产环境必须做的操作,而不是磁盘节点默认实现的功能。
2.在内存节点声明队列并发布消息之后,然后重启内存节点,重启之后队列的内容仍然存在。


1.磁盘节点可以声明持久化或者是非持久化,但是生产环境正常要持久化的。
2.内存节点的消息是可以持久化的。

顺便加深了理解: 内存节点,除了磁盘节点的地址外,其他元数据都放在内存中。重启之后会从磁盘节点下载元数据。注意是元数据。

新手上路,请多包涵

关于第二条,我觉得不应该这么说。内存节点应该是没有持久化的,持久化设置是一个队列行为。

内存节点必须存在集群结构中,在磁盘和内存节点组成集群时,通过客户端向集群发送消息,不管指定的是哪个节点地址,只要队列消息是持久化的,都会先将消息持久化到 磁盘节点,然后给 客户端回送接收成功确认。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进