分布式消息服务RabbitMQ版
分布式消息服务RabbitMQ版
- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
- API参考
- SDK参考
-
常见问题
-
实例问题
- RabbitMQ使用的版本是多少?
- RabbitMQ实例SSL连接的协议版本号是多少?
- 创建实例时为什么无法查看子网和安全组等信息?
- RabbitMQ集群实例如何均衡分发请求到每个虚拟机?
- RabbitMQ实例集群内部的队列是否有冗余备份?
- RabbitMQ实例是否支持持久化,如何定时备份数据?
- RabbitMQ实例开启SSL后,证书怎么获取?
- RabbitMQ实例的SSL开关是否支持修改?
- RabbitMQ实例是否支持扩容?
- RabbitMQ支持双向认证吗?
- RabbitMQ支持升级CPU和内存吗?
- 如何关闭RabbitMQ的WebUI?
- 实例是否支持修改可用区?
- 如何获取region id?
- 为什么不能选择2个可用区?
- 单机RabbitMQ实例如何变更为集群实例?
- RabbitMQ实例创建后,能修改VPC和子网吗?
- 连接问题
- 消息问题
- 监控告警问题
-
实例问题
- 视频帮助
- 文档下载
- 通用参考
本文导读
链接复制成功!
配置RabbitMQ持久化
默认情况下,RabbitMQ生产者生产的消息存储在内存中,当节点宕机或重启时,会导致消息丢失。RabbitMQ提供持久化机制,可在节点宕机或重启时确保消息不丢失。持久化包括Exchange持久化、Queue持久化和Message持久化。
持久化是将内存中的消息写入到磁盘中,以防异常情况导致内存中的消息丢失。但是磁盘的读写速度远不如内存,开启消息持久化后,RabbitMQ的性能会下降。与惰性队列不同,持久化消息会在磁盘和内存中各存储一份,只有在内存空间不够时,才会将内存中的消息删除,存储到磁盘中。
- 非持久化的Queue、Exchange在重启之后会丢失。
- 非持久化的Message在重启之后会丢失(经过持久化Queue/Exchange的消息不会自动变为持久化消息)。
- 持久化消息在尚未完成持久化时,如果服务器重启,消息会丢失。
- RabbitMQ AMQP-0-9-1版本Exchange、Queue、Message默认开启持久化。
设置Exchange持久化
- 在RabbitMQ WebUI页面设置Exchange持久化。
创建Exchange时,设置“durable”为“true”,如图1所示。
设置成功后如图2所示。
- 在RabbitMQ实例控制台设置Exchange持久化。
创建Exchange时,设置Exchange持久化,如图3所示。
设置成功后如图4所示。
设置Queue持久化
- 在RabbitMQ WebUI页面设置Queue持久化。
创建Queue时,设置“durable”为“true”,如图5所示。
设置成功后如图6所示。
- 在RabbitMQ实例控制台设置Queue持久化。
创建Queue时,设置Queue持久化,如图7所示。
设置成功后如图8所示。
设置Message持久化
Queue设置为持久化后,可通过客户端设置“MessageProperties”为“PERSISTENT_TEXT_PLAIN”,向Queue发送持久消息。
以下示例演示在Java客户端设置Message持久化:
import com.rabbitmq.client.MessageProperties; channel.basicPublish("", "my_queue",MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
父主题: 配置高级特性