rabbitMQ的消息确认

rabbitmq的简单介绍

一个消息队列,可以持久化到磁盘,消息存储在内存中
生产者推送消息到队列中,消费者从队列中拿出一条消息进行消费
先进先出

消息丢失

消息丢失

  1. amqp协议支持的事务模式

    • 和关系型数据库的事务类似,支持交易模式开起,提交事务,回滚的方式
      • 事务提交非常慢,会严重降低系统吞吐量
  2. 确认模式

    • 异步的方式
    • 消费后发起回调告诉rq,然后rq才从内存中删除该消息
    • 如果丢失,消息会回到队列中
    • 分为自动确认模式和手动确认
    • 自动确认更快捷,但不安全,如果在成功发送之前,消费者的TCP连接或通道关闭,服务器发送的消息将丢失。在使用自动确认模式时,需要考虑的另一件事是消费者过载
    • 手动确认模式可以使用 prefetch,限制通道上未完成的(“正在进行中的”)发送的数量。然而,在自动确认的情况下,没有这样的限制

      如果忘记确认,会导致内存爆满
      autoack为False,消息会分成两个部门,一部分是代分配的任务,一部分是没有确认的消息