参考资料:https://www.rabbitmq.com/tutorials/tutorial-two-java.html
默认情况下,队列中的消息是不持久化的。如果 RabbitMQ 崩溃,队列中的消息就全部消失了。
为了防止 RabbitMQ 重启导致的消息丢失,我们需要对消息持久化,将消息保存在物理存储介质中。
RabbitMQ 实现消息持久化需要:
1. 消息所在的队列必须设置为 durable
boolean durable = true;
channel.queueDeclare(queueName, durable, false, false, null);
2. 消息本身必须使用持久化模式发送
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().deliveryMode(2).build();
senderChannel.basicPublish("", QUEUE_NAME, properties, "Message 1".getBytes("UTF-8"));
delivery mode 为 2 时,表示发布的消息需要被持久化。
可以使用更简明的 MessageProperties.MINIMAL_PERSISTENT_BASIC 指明消息需要被持久化
senderChannel.basicPublish("", QUEUE_NAME, MessageProperties.MINIMAL_PERSISTENT_BASIC, "Message 2".getBytes("UTF-8"));
消息持久化会带来很大的性能开销,需要仔细考虑是否需要开启。