演示平台 文档中心 开发接口 官方网站

MQ消息队列持久化

  1. 队列持久化需要在声明队列时添加参数 durable=True,这样在rabbitmq崩溃时也能保存队列

  2. 仅仅使用durable=True ,只能持久化队列,不能持久化消息
  3. 消息持久化需要在消息生成时,添加参数 properties=pika.BasicProperties(delivery_mode=2)
收藏

    2019-11-15 06:26:21

    RabbitMQ要实现发布订阅持久化,按照消息的传输流程,可以分成三类:

    Exchange 持久化:如果不设定Exchange持久化,那么在RabbitMQ由于某些异常等原因重启之后,Exchange会丢失。Exchange丢失, 会影响发送端发送消息到RabbitMQ。

    Queue持久化:发送端将消息发送至Exchange,Exchange将消息转发至关联的Queue。如果Queue不设置持久化,那么在RabbitMQ重启之后,Queue信息会丢失。导致消息发送至Exchange,但Exchange不知道需要将该消息发送至哪些具体的队列。

    Message持久化:发送端将消息发送至Exchange,Exchange将消息转发至关联的Queue,消息存储于具体的Queue中。如果RabbitMQ重启之后,由于Message未设置持久化,那么消息会在重启之后丢失。

    为了保证发布订阅的持久化,必须设置Exchange、Queue、Message的持久化,才可以保证消息最终不会丢失。

    虽然持久化会造成性能损耗,但为了生产环境的数据一致性,这是我们必须做出的选择。但我们可以通过设置消息过期时间、降低发送消息大小等其他方式来尽可能的降低MQ性能的降低。

    回复 |  引用
共1条 1

登录 后发表评论。没有帐号? 注册 一个。

2019-11-15 06:22:07 28 次浏览 1 个评论