• RabbitMQ如何保证顺序性


    1. RabbitMQ消息顺序性说明

    顺序性: 消息的顺序性是指消费者消费到消息和发送者发布的消息的顺序是一致的
    举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来消费的
    目前很多资料显示RabbitMQ消息能够保障顺序性,这是不在正确的,或者说这个观点有很大局限性。在不使用任何Rabbitmq 的高级特性,也没有消息丢失、网络故障之类异常的情况下发生,并且只有一个消费者的情况下,也只有一个生产者的情况下可以保证消息的顺序性。如果有多少生产者同时发送消息,无法确定消息到达Broker的前后顺序,也就无法验证消息的顺序性,因为每一次消息的发送都是在各自的线程中进行的

    2. RabbitMQ消息顺序错乱演示

    生产者发送消息:
    1 不使用生产者确定机制,单生产者单消费者可以保证消息的顺序性

    在

    2 使用了生产者确认机制,那么就无法保证消息到过Broker的前后顺序,因为消息的发送是异步发送的,每一个线程的执行时间不同

    在这里插入图片描述

    3 生产端使用事务机制,保证消息的顺序性

    在这里插入图片描述

    消费端消费消息:
    1 单消费者可以保证消息的顺序性
    2 多消费者不难保证消息的顺序,因为每一个消息的消费都是在各自的线程中进行,每一个线程的执行时间不同

    3.RabbitMQ消息顺序性保障

    生产端启动事务机制,单生产者单消费者。如果我们不考虑消息到达MQ的顺序。只是考虑对已经到达MQ的消息顺序消费,那么需要保证消费者是单消费者即可

    4.重复消费解决方案

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    consul持久化失败
    Seata TCC、Saga、XA模式初识
    C# GC机制
    云原生 PostgreSQL 集群 - PGO:5分钟快速上手
    仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16
    Vue2父传子、子传父和兄弟间互传
    meterpreter命令
    Dart语言基础
    fcntl函数 非阻塞轮询
    Windows C++程序运行过程中生成dump文件
  • 原文地址:https://blog.csdn.net/qq_37653556/article/details/130795217