重复消息的解决方案

造成消息重复的根本原因是:网络不可达。只要通过网络交换数据,就无法避免这个问题。所以解决这个问题的办法就是绕过这个问题。那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理?

1. 消费端处理消息的业务逻辑保持幂等性
2. 保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现

第1条很好理解,只要保持幂等性,不管来多少条重复消息,最后处理的结果都一样。第2条原理就是利用一张日志表来记录已经处理成功的消息的ID,如果新到的消息ID已经在日志表中,那么就不再处理这条消息。

第1条解决方案,很明显应该在消费端实现,不属于消息系统要实现的功能。第2条可以消息系统实现,也可以业务端实现。正常情况下出现重复消息的概率其实很小,如果由消息系统来实现的话,肯定会对消息系统的吞吐量和高可用有影响,所以最好还是由业务端自己处理消息重复的问题,这也是RocketMQ不解决消息重复的问题的原因。

RocketMQ不保证消息不重复,如果你的业务需要保证严格的不重复消息,需要你自己在业务端去重。

RocketMQ的Consumer详解之重复消息的解决方案相关推荐

  1. RocketMQ的Consumer详解之push和pull模式(长轮询)

    push和pull模式 在RocketMQ中,消费者有两种模式,一种是push模式,另一种是pull模式. push模式:客户端与服务端建立连接后,当服务端有消息时,将消息推送到客户端. pull模式 ...

  2. RocketMQ的Producer详解之顺序消息(原理)

    顺序消息 在某些业务中,consumer在消费消息时,是需要按照生产者发送消息的顺序进行消费的,比如在电商系统中,订单的消息,会有创建订单.订单支付.订单完成,如果消息的顺序发生改变,那么这样的消息就 ...

  3. RocketMQ两万字详解

    目录 简介 1.RocketMQ搭建(基于linux) 1.1 安装NameServer 1.2 安装Broker 1.3 控制台安装 2 .集成Spring Boot测试 2.1添加依赖 2.2 添 ...

  4. RocketMQ的Producer详解之分布式事务消息(代码实现以及过程分析)

    执行流程 1. 发送方向 MQ 服务端发送消息. 2. MQ Server 将消息持久化成功之后,向发送方 ACK 确认消息已经发送成功,此时消息为半消息. 3. 发送方开始执行本地事务逻辑. 4. ...

  5. UE5 官方案例Lyra 全特性详解 9.蓝图消息系统

    UE5 官方案例Lyra 全特性详解 0.前言 1.消息监听蓝图节点 1.1 监听限定 1.2 消息输出 2. 广播消息蓝图节点 3.其他相关蓝图节点 4. 后续更新 0.前言 最近在和三个小伙伴一起 ...

  6. linux 消息对lie_详解linux进程间通信-消息队列

    前言:前面讨论了信号.管道的进程间通信方式,接下来将讨论消息队列. 一.系统V IPC 三种系统V IPC:消息队列.信号量以及共享内存(共享存储器)之间有很多相似之处. 每个内核中的 I P C结构 ...

  7. 详解分布式系统与消息投递

    作者:Draveness https://draveness.me/message-delivery 消息是一个非常有趣的概念,它是由来源发出一个离散的通信单元,被发送给一个或者一群接受者,无论是单体 ...

  8. RocketMQ的Producer详解之分布式事务消息(原理分析)

    Half(Prepare) Message 指的是暂不能投递的消息,发送方已经将消息成功发送到了 MQ 服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成"暂不能投递&qu ...

  9. RocketMQ的Producer详解之分布式事务消息(回顾事务)

    回顾什么事务 聊什么是事务,最经典的例子就是转账操作,用户A转账给用户B1000元的过程如下: 用户A发起转账请求,用户A账户减去1000元 用户B的账户增加1000元 如果,用户A账户减去1000元 ...

最新文章

  1. 移动办公时代的工程行业怎么管理图像?大象云推出3D可视化整体解决方案
  2. centos7.2安装mysql 1
  3. VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)
  4. ViewPager嵌套ViewPager 滑动冲突
  5. form表单提交时,同一个名字的input类型的两个同时提交会覆盖吗
  6. 请求列出指定服务器上的可用功能失败_滥用 ESI 详解(上)
  7. 2.JAVA-基础语法以及String的介绍
  8. php制作闹钟,简易闹钟 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
  9. Hypermesh软件初学
  10. 微信小程序开发工具显示网络错误
  11. CentOS7搭建FLV和RTMP流媒体服务器
  12. EventBus粘性事件
  13. PRA10.3平台API接口调用
  14. mysql循环方法总结
  15. MATLAB中的多项式的四则运算与求根方法
  16. matlab极性电容叫什么,电解电容与无极性电容之间的区别是什么
  17. 求与下面谓词公式等值的前束范式_离散数学课后答案
  18. 米兔机器人自主编程_米兔积木机器人编程编写指南.pdf
  19. 时间复杂度和空间复杂度的计算方法
  20. mysql zimbra_记一次zimbra服务器故障导致mysql起不来问题

热门文章

  1. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
  2. ExtJS 中自定义类
  3. .Net(c#)加密解密之Aes和Des
  4. 如何创建并发布Google Earth KML 地标文件?
  5. 【Apache POI】基础处理方法总结
  6. 操作系统/etc/hosts文件配置
  7. 《区块链开发指南》一一第1章 区块链基础
  8. Collections练习之按照字符串长度进行排序
  9. 搭建本地的git仓库
  10. 在linux的weblogic上增加启动参数