码上敲享录 > RabbitMQ面试题 > 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?

为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?

上一章章节目录下一章 2023-07-14已有222人阅读 评论(0)

确保消息(message)被可靠地持久化需要同时满足以下两个条件:


1. 队列(queue)和交换机(exchange)具有`durable`属性:将队列和交换机声明为`durable`,意味着它们在RabbitMQ服务器重启后仍然保持存活,不会丢失。`durable`属性会将队列和交换机的元数据(metadata)持久化到磁盘上,并在重启后重新加载。


- 当队列具有`durable`属性时,即使RabbitMQ服务器发生故障重启,队列也会保持存在,不会丢失。

- 当交换机具有`durable`属性时,即使RabbitMQ服务器发生故障重启,交换机也会保持存在,不会丢失。


2. 消息具有`persistent`属性:将消息的`deliveryMode`属性设置为`2`,表示消息被标记为持久化。消息的持久化属性告诉RabbitMQ服务器,该消息需要被写入磁盘上的日志文件,以防止数据丢失。


- 当消息被标记为持久化时,即使RabbitMQ服务器发生故障重启,消息也会被保留在磁盘上,不会丢失。


这两个条件是为了确保消息的可靠持久化。只有将队列和交换机声明为`durable`,并在发送消息时将消息标记为持久化,才能使消息在任何情况下都不会丢失,包括RabbitMQ服务器的重启。


需要注意的是,即使消息被标记为持久化,也不能完全保证消息的绝对不丢失。在极端情况下(如RabbitMQ服务器硬件故障),仍有可能发生消息丢失的情况。因此,在关键业务场景中,可以考虑使用消息备份、持久化存储等更强大的机制来提高消息的可靠性。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交