【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性

文章目录

  • 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性
  • 一、如何避免消息重复投递和消息重复消费
  • 二、如何防止消息丢失
  • 三、如何保证消息的顺序性
  • 四、如何保证消息队列的可用性

一、如何避免消息重复投递和消息重复消费

为了防止 RabbitMQ 没收到生产者发送的消息,所以生产者需要重复投递。但是消息重复投递就有可能会带来消息重复消费的问题。解决消息重复消费的关键在于消息处理逻辑的幂等性,也就是说同一条消息无论被消费多少次,产生的结果和消息被消费一次是一样的。比如银行要给一个账户增加 50元,我们就可以先查询出账户的余额,假设账户余额为 100 元,然后我们以余额 100 元作为 where 条件对余额进行更新,这样当账户余额增加到 150 元后就无法再查询出这条记录,也就无法再次增加余额了。实现消息处理幂等性的方式没有一个确定的公式,具体实现细节需要根据具体的业务场景来设计

二、如何防止消息丢失

消息丢失可能会发生在生产者、也可能发生在消息队列和消费者。对于生产者来说,每次发送消息后需要收到消息队列返回的确认消息才能保证消息发送成功,如果没有收到确认消息则需要重新发送。对于消息队列来说,需要提高消息队列的可用性,可以通过镜像集群模式来解决。但是没有任何一个系统可以保证不会出现意外情况,所以我们要将重要的消息设置为持久化,这样即使消息队列宕机,消息也不会丢失。对于消费者来说,消费者需要在执行完消息后才能给消息队列返回确认消息,这样即使消息执行失败,也不会返回确认消息,消息队列也就不会删除这条消息,然后可以根据需求选择是否重新发送

三、如何保证消息的顺序性

一个消费者对应一个队列,并且确保需要保证顺序的消息路由在同一个队列中

四、如何保证消息队列的可用性

可以使用镜像集群模式,RabbitMQ 有两种集群模式:普通集群模式和镜像集群模式

普通集群模式并不能保证消息队列的可用性。它的实现方式就是在多台机器上启动多个 RabbitMQ 实例,但是创建的队列只会保存在其中一个实例中,其他的实例只是同步队列的配置信息,通过配置信息来找到队列所在的实例。因此,普通集群模式只能提高消息队列的吞吐量,如果保存队列的实例宕机,那么整个集群还是会失效

镜像集群模式才是 RabbitMQ 的高可用模式,跟普通集群模式的区别在于创建的队列会同步保存在所有实例中,这样即使其中一个实例宕机,还有其他的实例可以正常工作,这样就保证了消息队列的可用性

【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性相关推荐

  1. SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:rrd.me/f2cxz 一.先扔一张图 说明: 本文涵盖了 ...

  2. rabbitmq消费固定个数消息_SpringBoot+RabbitMQ (保证消息100%投递成功并被消费)

    作者:wangzaiplus https://www.jianshu.com/p/dca01aad6bc8 一.先扔一张图 说明:本文涵盖了关于RabbitMQ很多方面的知识点, 如: 消息发送确认机 ...

  3. SpringBoot + RabbitMQ (保证消息100%投递成功并被消费)

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | jianshu.com/p/dca01aad6 ...

  4. springboot + rabbitmq发送邮件(保证消息100%投递成功并被消费)

    前言: RabbitMQ相关知识请参考: https://www.jianshu.com/p/cc3d2017e7b3 Linux安装RabbitMQ请参考: https://www.jianshu. ...

  5. 消费流程图_SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)

    来自:简书,作者:wangzaiplus 链接:https://www.jianshu.com/p/dca01aad6bc8 一.先扔一张图 说明: 本文涵盖了关于RabbitMQ很多方面的知识点, ...

  6. 【重难点】【事务 03】分布式事务

    [重难点][事务 03]分布式事务 文章目录 [重难点][事务 03]分布式事务 一.为什么需要分布式系统架构 二.系统架构演进 1.单体应用架构 2.垂直应用架构 3.分布式架构 4.SOA 架构 ...

  7. 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题

    消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...

  8. RabbitMQ如何保证消息的顺序性【重点】

    1.1 保证顺序性的意义 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常. 举例:   比如通过mysql binlog进行两个数 ...

  9. kafka的消费顺序_Kafka如何保证消息的顺序性

    1. 问题 比如说我们建了一个 topic,有三个 partition.生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到 ...

最新文章

  1. 要想成功 需要了解的东西
  2. echarts前后端交互数据_SpringBoot2.0实战(26)整合SpringSecurity前后端分离JSON交互...
  3. hibernate.hbm.xml配置文件解析
  4. volatile关键字对
  5. 常用sql-----DDL语句
  6. could not initialize proxy - no Session
  7. 基于 HTTP 协议的几种实时数据获取技术
  8. 【嵌入式】C语言高级编程-长度为0的数组(05)
  9. linux下使用pidcat找bug
  10. v-region 地址组件无法回显问题(选择地址保存后,打开编辑,发现刚才选择的地址【省市县乡】信息消失,信息不回显)
  11. 暑期训练日志----2018.8.12
  12. c语言剪枝函数,[求助]关于剪枝算法
  13. 麒麟ARM版:不能使用U盘安装,只能使用光盘
  14. el-form-item 如何限制只能输入数字_中教云数字课程教材云平台操作答疑
  15. win7计算机自动关机设置在哪里设置方法,win7怎么设置自动关机【详细步骤】
  16. transformer 翻译模型
  17. WDF队列分析(3)
  18. airpods版本号_怎么看airpods版本号 苹果airpods查看固件版本教程详解
  19. 总结下几个有漏洞第三方插件
  20. 关于wifi共享大师破解版在电脑休眠后wifi无法连接的问题

热门文章

  1. java 只有日期的类_【你不知道的事系列】Java中处理日期的类
  2. android清理缓存功能吗,Android清理缓存功能实现
  3. 函数名,函数体,返回值,参数
  4. codeforces 892E(离散化+可撤销并查集)
  5. 设计模式三(工厂方法模式)学习笔记
  6. toast, 警告窗
  7. Linux 安装 Pycharm
  8. UVA5876 Writings on the Wall 扩展KMP
  9. Android-标题状态栏的隐藏
  10. oracle Group by 分组查询后,分页