2.16. 持久化以及如何实现(补充篇)

未匹配的标注

今天补充一下rabbitmq的持久化操作,我们在学习redis的时候就说过持久化,在php当中操作redis并并持久化还是比较简单的,只需要修改修改配置即可,当然在golang里面也是如此
为什么要进行持久化?
rabbitmq的消息都是存放在内存当中的,一旦服务器宕机或者rabbitmq服务挂掉那么我们的消息将会出现丢失的情况,为了在rabbitmq服务重启的情况下数据不丢失,我们就需要进行持久化数据到磁盘,rabbitmq当中持久化数据到磁盘需要将 exchange(交换机)、queue(队列)、message(消息)都设置为可持久化(durable),这样的话能够保证绝大部分的消息不丢失,但是还有一些小概率会发生消息丢失的情况!虽然不能说百分之百保证消息不会丢失,但是能够保证绝大部分不会丢失。在实际项目中,通常需要对消息进行持久化,因为不可能保证服务器永远不会出现down机情况!
如果将所有的消息都进行持久化操作,这样会严重影响RabbitMQ的性能。写入磁盘的速度比写入内存的速度慢很多。所以要在可靠性和吞吐量之间做权衡。
代码太多不方便直接写到博文里面,以截图的形式呈现,想要源码加qq:495681586 收费

simple模式下大体如此,其他模式也一样!

多说几句,搞rabbitmq你得先新建交换机或者说virtual host 比如我这里新建的是rbtmq

持久化以及如何实现(补充篇)
如图所示上边都是自带的 最后一个是我在代码当中生成的 rbtmq就是你交换机的名称 类型topic
持久化以及如何实现(补充篇)
再看持久化之后的队列:
D表示该队列已经持久化了!
Total表示消息的总个数

持久化以及如何实现(补充篇)
点击队列进去之后你会发现:
这明摆着就是堵塞在了队列里面没有被消费!一跑消费端代码全部都出去了
持久化以及如何实现(补充篇)

持久化在很多时候还是很有必要的!

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~