一、说明
我们一定要保证交换机、队列和消息是持久化的,不然重启MQ或其他情况下会丢失,除非你认为要发送的消息真的不重要,就算丢失了也无所谓。
二、交换机持久化
点进去创建交换机的源码查看,交换机默认就是持久化
第一种创建方式
前面有说过交换机的几种类型,我下面拿fanout类型的交换机做例子
//定义持久化交换机
@Bean
public FanoutExchange fanoutExchange() {
//第三个参数就是持久化的意思
return new FanoutExchange("fanout.exchange",true,false);
}
第二种创建方式
//定义direct类型交换机
@Bean
public DirectExchange directExchange() {
return ExchangeBuilder.directExchange("direct.exchange").build();
}
三、队列持久化
第一种创建方式
//定义持久化队列
@Bean
public Queue directQueue1() {
//第二个参数就是持久化的意思
return new Queue("direct.queue1",true,false,false);
}
第二种创建方式
//定义持久化队列
@Bean
public Queue topicQueue1(){
return QueueBuilder.durable("topic.queue1").build();
}
四、消息持久化
//消息持久化
Message message = MessageBuilder
.withBody("你好".getBytes())
//设置为持久化消息
.setDeliveryMode(MessageDeliveryMode.PERSISTENT)
.build();
rabbitTemplate.convertAndSend("fanout.exchange", "", message, correlationData);