消息持久化
生產(chǎn)者確認(rèn)可以確保消息投遞到RabbitMQ的隊列中,但是消息發(fā)送到RabbitMQ以后,如果突然宕機,也可能導(dǎo)致消息丟失。
要想確保消息在RabbitMQ中安全保存,必須開啟消息持久化機制。
-
交換機持久化
-
隊列持久化
-
消息持久化
交換機持久化
RabbitMQ中交換機默認(rèn)是非持久化的,mq重啟后就丟失。
SpringAMQP中可以通過代碼指定交換機持久化:
@Bean public DirectExchange simpleExchange(){// 三個參數(shù):交換機名稱、是否持久化、當(dāng)沒有queue與其綁定時是否自動刪除return new DirectExchange("simple.direct", true, false); }事實上,默認(rèn)情況下,由SpringAMQP聲明的交換機都是持久化的。
可以在RabbitMQ控制臺看到持久化的交換機都會帶上D的標(biāo)示:
隊列持久化
RabbitMQ中隊列默認(rèn)是非持久化的,mq重啟后就丟失。
SpringAMQP中可以通過代碼指定交換機持久化:
@Bean public Queue simpleQueue(){// 使用QueueBuilder構(gòu)建隊列,durable就是持久化的return QueueBuilder.durable("simple.queue").build(); }事實上,默認(rèn)情況下,由SpringAMQP聲明的隊列都是持久化的。
可以在RabbitMQ控制臺看到持久化的隊列都會帶上D的標(biāo)示:
消息持久化
利用SpringAMQP發(fā)送消息時,可以設(shè)置消息的屬性(MessageProperties),指定delivery-mode:
-
1:非持久化
-
2:持久化
用java代碼指定:
?默認(rèn)情況下,SpringAMQP發(fā)出的任何消息都是持久化的,不用特意指定。
總結(jié)