image.png
    项目中是如何保证消息的可靠性的:

      1. 生产者确认机制
      1. mq持久化
      1. 消费者确认机制
      1. 失败重试机制

    1.生产者的确认机制:
    在发送消息的时候给消息指定一个唯一标识id。消息发送到Mq以后,会返回一个结果给发送者,表示消息是否处理成功,返回ack确认字符
    image.png

    2.mq的持久化
    生产者确认可以确保消息投递到RabbitMQ的队列中,但是消息发送到RabbitMQ以后,如果突然宕机,也可能导致消息丢失。
    队列,交换机,以及消息都要进行持久化
    要想确保消息在RabbitMQ中安全保存,必须开启消息持久化机制。
    Mq就是持久化的,持久化到硬盘中的

    1. 消费者确认机制
      三种确认机制:
      image.png
      image.png
      acknowledge-mode : 三种机制
      //项目中使用地是Auto模式,manual太麻烦了// 俩者都不会造成消息丢失
      但是会无限重试;消费者一直消费,mq压力特别大

    4.消费者重试机制
    image.png
    image.png
    但是这样消息还是会被丢失!!
    还有一个限制最大时间的参数:
    image.png
    允许等待的最大时间,默认是50秒
    最后一个参数:有事务为false,没有事务返回true

    4.2 失败策略:
    image.png
    默认是直接丢失:

    消息转换器,消息失败后 将消息投递到异常交换机中,交给人工处理
    image.png
    或者堆积在死信交换机里

    死信交换机
    什么是死信交换机:

    • 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false(重入队列被设置为false)
    • 消息是一个过期消息,超时无人消费
    • 要投递的队列消息满了,无法投递

    image.png
    也可以在重试次数过后放入死信交换机
    image.png

    死信交换机用作于延时队列中(延时消费的效果)
    image.png