【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的节点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A minor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值