爲什麼要持久化,目的就是避免消息丟失。那麼如何避免消息丟失?
1) 消費者的ACK機制。可以防止消費者丟失消息(手動ack)。
2) 但是,如果在消費者消費之前,MQ就宕機了,消息就沒了,所以要將消息持久化,前提是:隊列、Exchange都持久化。
1. 交換機持久化
channel.exchangeDeclare(EXCHANGE_NAME, "topic",true);
durable 持久化
2. 隊列持久化
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
3. 消息持久化
channel.basicPublish(EXCHANGE_NAME, "item.insert",
MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
經過上述的持久化設置設置以後,即使在rabbitMq服務宕機了,從其以後仍然可以恢復之前的狀態。