RabbitMQ消息可靠性之持久化
1. 前言
在RabbitMQ
服务端,意外退出或由于某种原因崩溃时,会忽视队列和消息。确保消息不会丢失需要将交换机、队列、消息都标记为持久化。
2. 交换机
交换机的持久化其实就是相当于将交换机的属性在服务器内部保存,当MQ的服务器发生意外或关闭之后,重启RabbitMQ
时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。
创建时,使用durable(true)
设置持久化:
@Bean("bootExchange")
public Exchange bootExchange() {
return ExchangeBuilder.directExchange("bootExchange").durable(true).build();
}
3. 队列
队列持久化类似于交换机持久化,创建时,使用durable(" ")
设置持久化:
@Bean("bootQueue")
public Queue bootQueue() {
return QueueBuilder.durable("bootQueue").build();
}
4. 消息
众所周知,RabbitMQ的消息是依附于队列存在的,所以想要消息持久化,那么前提是队列也要持久化。RabbitTemplate
发送消息默认就是持久化的:
RabbitTemplate.convertAndSend()