關于springBoot整合RabbitMQ及基本使用可以參考:springBoot整合RabbitMQ及基本使用
FanoutExchange纯趋、DirectExchange颗祝、TopicExchange:
- durable : 為true庄涡,聲明exchange是持久化的双炕,當RabbitMQ崩潰了重啟后exchange仍然存在蹭越;
- autoDelete : 當該exchange所有的隊列都被unbind之后舞终,該exchange自動被刪除霞揉;
設置exchange為持久化之后旬薯,并不能保證消息不丟失,因為此時發(fā)送往exchange中的消息并不是持久化的适秩,需要配置delivery_mode=2指明message為持久的绊序。
在FanoutExchange中,會將發(fā)送的消息封裝為 Message 對象秽荞,該對象中有一個 MessageProperties 對象骤公,用來指定消息的屬性,而 MessageProperties 中默認的 deliveryMode 屬性為 MessageDeliveryMode.PERSISTENT 扬跋,查看源碼得知阶捆,MessageDeliveryMode.PERSISTENT = 2,所以 FanoutExchange 發(fā)送的消息默認就是持久化的。
static {
DEFAULT_DELIVERY_MODE = MessageDeliveryMode.PERSISTENT;
DEFAULT_PRIORITY = 0;
}
public enum MessageDeliveryMode {
NON_PERSISTENT,
PERSISTENT;
private MessageDeliveryMode() {
}
public static int toInt(MessageDeliveryMode mode) {
switch(mode) {
case NON_PERSISTENT:
return 1;
case PERSISTENT:
return 2;
default:
return -1;
}
}
......
}
Queue :
- durable : 為true洒试,聲明 queue 是持久化的倍奢,當RabbitMQ崩潰重啟后 queue 仍然存在;
- exclusive: 為true垒棋,聲明該 queue 為排他隊列卒煞,如果一個隊列被聲明為排他隊列,該隊列僅對首次聲明它的連接可見叼架,并在連接斷開時自動刪除該 queue畔裕,也就是當 connection 斷開后,該 queue 就會被刪除乖订;
- autoDelete : 為true扮饶,當所有訂閱了該 queue 的 consumer 從RabbitMQ斷開后就會刪除該queue,或者是當 connection 斷開后乍构,該 queue 就會被刪除甜无,與 exclusive 不同的是,如果一開始就沒有 consumer 連接到該 queue蜡吧,那么該 queue 將不會被刪除毫蚓;
durable屬性和auto-delete屬性可以同時生效;
durable屬性和exclusive屬性會有性質上的沖突昔善,兩者同時設置時,僅exclusive屬性生效畔乙;
auto_delete屬性和exclusive屬性可以同時生效君仆;
參考: https://yq.aliyun.com/articles/42205