RabbitMQ的持久化 面试

交换机的持久化:

交换机的持久化其实就是相当于将交换机的属性在服务器内部保存。当MQ的服务器发生意外或关闭之后,重启RabbitMQ时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。

其是在声明交换器的时候,将 durable 属性设置为 true。如果交换器不设置持久化,那么在 RabbitMQ 服务重启之后,相关的交换器就会被删除。对于长期使用的交换器来说,建议将其置为持久化。

//springboot代码 
@Bean
    public TopicExchange payTopicExchange(){
        /**
         * 参数1:交换机类型
         * 参数2:是否持久化 true是, 默认为 true
         * 参数3:是否自动删除 true是, 默认为 false
         */
        return new TopicExchange(exchangeMame,true,false);
    }

队列持久化:

队列的持久化也是在声明队列的时候,将durable参数设置为true。如果队列不设置持久化,那么 RabbitMQ服务重启之后,队列就会被删除,既然队列都不存在了,队列中的消息也会丢失。

//springboot代码 
@Bean
    public Queue dlQueue(){
        /**
         * 参数1:队列名称
         * 参数2:是否持久化 默认:true
         */
        return new Queue(dlQueue,true);
    }

信息持久化:

队列的持久化能保证其本身不会因重启、关闭、宕机的情况而丢失,但是并不能保证内部所存储的消息不会丢失。要确保消息不会丢失,需要将消息设置为持久化。信息持久化则是将信息存在磁盘中

//springboot代码
MessagePostProcessor messagePostProcessor = message -> {
    MessageProperties messageProperties = message.getMessageProperties();
    //设置消息持久化
    messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
    return message;
};
rabbitTemplate.convertAndSend("exchangeName","routingKey","消息内容",
messagePostProcessor);

注意:

可以将所有的消息都设置为持久化,但是这样会严重影响 RabbitMQ 的性能。写入磁盘的速度比写入内存的速度慢得不只一点点。对于可靠性不是那么高的消息可以不采用持久化处理,以提高整体的吞吐量。在选择是否要将消息持久化时,需要在可靠性和吞吐量之间做权衡。

一般的系统也用不到对消息进行持久化。不过交换机和队列的持久化还是要支持的。

RabbitMQ 持久化有什么有优点?

持久化可以提高 RabbitMQ 的可靠性,以防在异常情况(重启、关闭、宕机等)下的数据丢失。

RabbitMQ 持久化有什么缺点?

持久化的缺点就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值