RabbitMQ 之持久化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ 之持久化相关的知识,希望对你有一定的参考价值。

参考技术A 交换机和队列持久化是比较简单的,可以通过在申明的时候设置 durable 为 true 就可以进行持久。但是要注意的是持久的只是元数据,也就是我们在申明那一刻的信息。而队里的持久并不会导致我们消息的持久存在,所以我们想要消息持久需要针对消息做持久化。
在Spring Boot + RabbitMq 整合里提供了一个快捷的设置消息持久的方式:
MessageProperties.MINIMAL_BASIC //空基本属性,未设置字段
MessageProperties.MINIMAL_PERSISTENT_BASIC //空基本属性,仅将deliveryMode设置为2(持久性)
MessageProperties.BASIC //内容类型“application / octet-stream”,deliveryMode 1(非持久),优先级为零
MessageProperties.PERSISTENT_BASIC //内容类型“application / octet-stream”,deliveryMode 2(持久性),优先级为零
MessageProperties.TEXT_PLAIN //内容类型“text / plain”,deliveryMode 1(非持久),优先级为零
MessageProperties.PERSISTENT_TEXT_PLAIN //内容类型“text / plain”,deliveryMode 2(持久性),优先级为零
以上的返回值是 BasicProperties 类型

以上的字段值大家自己暂时理解,之后更新。

private String contentType;//消息类型
private String contentEncoding; //内容编码
private Map<String,Object> headers; //可以作为消息的载体
private Integer deliveryMode;//设置为2(即可持久),
private Integer priority; //优先级设置
private String correlationId;
private String replyTo; //RPC回调 传队列的名称
private String expiration; //过期时间
private String messageId; //RPC回调设置id
private Date timestamp;
private String type;
private String userId;
private String appId;
private String clusterId;

当然了直接写 new BasicProperties ()传给消息也是可以的。不设置传null 值即可。

想要确保消息不会丢失的正确做法是,生产者添加ACK确认,消费者添加ACK确认,RabbitMQ镜像队列(主节点挂了子节点上)集群

以上是关于RabbitMQ 之持久化的主要内容,如果未能解决你的问题,请参考以下文章

第五章:Python 之 RabbitMQ消息持久化

RabbitMQ之持久化不公平分发 预取值发布确认模式

RabbitMQ 高可用之镜像队列

RabbitMQ 高可用之镜像队列

RabbitMQ 高可用之镜像队列

Rabbitmq 相关介绍之单机镜像模式集群配置