【RabbitMQ】消息可靠性投递(三)Queue存储消息

系列文章:

第三个环节是消息在队列存储,如果没有消费者的话,队列一直存在在数据库中。

1.持久化到硬盘

如果RabbitMQ的服务或者硬件发生故障,比如系统宕机、重启、关闭等等,可能会导致内存中的消息丢失,所以要把消息本身和元数据(队列、交换机、绑定)都保存到磁盘。

@Bean("myQueue") // 队列持久化
public Queue queue(){
    
    
    //queueName,durable,exclusive,autoDelete,Properties 
    returnnewQueue("MY_TEST_QUEUE",true,false,false,newHashMap<>());  // 配置持久化为true
}

@Bean("myExchange") // 交换机持久化
public DirectExchange exchange(){
    
     
    //exchangeName,durable,exclusive,autoDelete,Properties 
    return newDirectExchange("JMY_TEST_EXCHANGE",true,false,newHashMap<>()); 
}

另外,在Producer发送消息时还要设置消息为持久化的(注:Message是Spring AMQP封装的)

MessageProperties messageProperties = new MessageProperties(); // 创建消息配置
messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT); // 配置消息持久化
Message message = new Message("持久化消息".getBytes(), messageProperties); // 创建Message时传入配置

rabbitTemplate.send("myQueue", "my", message); // 发送消息

2.集群模式

如果只有一个RabbitMQ的节点,即使交换机、队列、消息做了持久化,如果服务崩溃或者硬件发生故障,RabbitMQ的服务一样是不可用的,所以为了提高MQ服务的可用性,保障消息的传输,我们需要有多个RabbitMQ的节点

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/114199372