消息总线真的能保证幂等?

3台虚拟机部署Doris详细文档(含校验步骤) 摘要:本文详细介绍了Apache Doris在3台虚拟机上的集群部署方案。采用1主FE+1从FE+1观察者FE+3BE的混合部署模式,确保元数据高可用性。硬件配置建议测试环境4核16GB内存,生产环境8核64GB内存。部署步骤包括系统环境配置(关闭防火墙、内核参数优化)、FE/BE节点配置启动、集群初始化验证等。重点配置了IP白名单(172.30.0.115)和数据目录(/data/doris)。通过MySQL客户端和WebUI可监控集群状态,实现千万级数据的实时分析能力,后续可通过增加BE节点线性扩展。 阅读详情

一、缘起

如《消息总线消息必达》所述,MQ消息必达,架构上有两个核心设计点:

(1)消息落地

(2)消息超时、重传、确认


再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。


为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。

 

举个栗子:

购买会员卡,上游支付系统负责给用户扣款,下游系统负责给用户发卡,通过MQ异步通知。不管是上半场的ACK丢失,导致MQ收到重复的消息,还是下半场ACK丢失,导致购卡系统收到重复的购卡通知,都可能出现,上游扣了一次钱,下游发了多张卡。

 

消息总线的幂等性设计至关重要,是本文将要讨论的重点。

 

二、上半场的幂等性设计


MQ消息发送上半场,即上图中的1-3

1,发送端MQ-client将消息发给服务端MQ-server

2,服务端MQ-server将消息落地

3,服务端MQ-server回ACK给发送端MQ-client

如果3丢失,发送端MQ-client超时后会重发消息,可能导致服务端MQ-server收到重复消息。

 

此时重发是MQ-client发起的,消息的处理是MQ-server,为了避免步骤2落地重复的消息,对每条消息,MQ系统内部必须生成一个inner-msg-id,作为去重和幂等的依据,这个内部消息ID的特性是:

(1)全局唯一

(2)MQ生成,具备业务无关性,对消息发送方和消息接收方屏蔽

 

有了这个inner-msg-id,就能保证上半场重发,也只有1条消息落到MQ-server的DB中,实现上半场幂等。

 

三、下半场的幂等性设计


MQ消息发送下半场,即上图中的4-6

4,服务端MQ-server将消息发给接收端MQ-client

5,接收端MQ-client回ACK给服务端

6,服务端MQ-server将落地消息删除

需要强调的是,接收端MQ-client回ACK给服务端MQ-server,是消息消费业务方的主动调用行为,不能由MQ-client自动发起,因为MQ系统不知道消费方什么时候真正消费成功。

如果5丢失,服务端MQ-server超时后会重发消息,可能导致MQ-client收到重复的消息。

 

此时重发是MQ-server发起的,消息的处理是消息消费业务方,消息重发势必导致业务方重复消费(上例中的一次付款,重复发卡),为了保证业务幂等性,业务消息体中,必须有一个biz-id,作为去重和幂等的依据,这个业务ID的特性是:

(1)对于同一个业务场景,全局唯一

(2)由业务消息发送方生成,业务相关,对MQ透明

(3)由业务消息消费方负责判重,以保证幂等

 

最常见的业务ID有:支付ID,订单ID,帖子ID等。

 

具体到支付购卡场景,发送方必须将支付ID放到消息体中,消费方必须对同一个支付ID进行判重,保证购卡的幂等。

 

有了这个业务ID,才能够保证下半场消息消费业务方即使收到重复消息,也只有1条消息被消费,保证了幂等。

 

三、总结

MQ为了保证消息必达,消息上下半场均可能发送重复消息,如何保证消息的幂等性呢?

上半场

MQ-client生成inner-msg-id,保证上半场幂等。

这个ID全局唯一,业务无关,由MQ保证。

 

下半场

业务发送方带入biz-id,业务接收方去重保证幂等。

这个ID对单业务唯一,业务相关,对MQ透明。


结论:幂等性,不仅对MQ有要求,对业务上下游也有要求。


==【完】==


转自:https://mp.weixin.qq.com/s/h74d6LtGB5M8VF0oLrXdCA






【调优】OpenClaw从零开始高阶调优之skill篇 本文详细解析了OpenClaw技能系统的核心机制。首先介绍了技能的分层加载逻辑,按照优先级从高到低依次为:工作区专属技能、全局共享技能、出厂自带技能和自定义路径技能。通过流程图展示了从扫描到注册的完整加载流程,并解释了同名技能覆盖规则。随后深入剖析了SKILL.md文件结构,包含YAML元数据定义技能属性和Markdown正文说明使用方法,以公众号写作技能为例展示了具体配置。文章还提供了技能优先级切换的实用技巧,帮助用户灵活管理不同版本的技能。 阅读详情

相关推荐

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

消息中间件概述

1 消息中间件概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。 2 消息中间件的组成 2.1 Broker 消息服务器,作为server提供消息核心服务 2.2...

weixin_33805992的博客 4792

ERPS协议原理

目录 1、ERPS概述: 2、ERPS名词概念解释: 3、ERPS协议报文: 4、ERPS单环基本原理: 5、单环多实例原理: 6、多环原理: 1、ERPS概述: ERPS(Ethernet Ring Protection Switching),即以太网多环保护技术,是ITU-T定义的一种二层破环协议标准,标准号为ITU-T G.8032/Y1344,因此又称为G.8032。它定义了RAPS(Ring Auto Protection Switching)协议报文和保护倒换机制。 ERPS目前支持v1和v2两

weixin_44880796的博客 1万+

消息中间件(三)——如何保证消息幂等性

1、什么是消息的幂等性 幂等:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。这是百度百科给出的幂等的概念。 消息的幂等性:就是即使多次收到了消息,也不会重复消费。所以保证消息的幂等性就是保证消息不会重复消费,这在开发中是很重要的。比如客户点击付款,如果点击了多次,那也只能扣一次费。 2、MQ的幂等性如何保证 我们所熟悉的RabbitMQ、RocketMQ、k...

zengdongwen的博客 1万+

单细胞测序避坑指南:为什么你的免疫组库数据总出问题?5‘转录组7个关键细节

本文深度解析了5'端单细胞测序技术在免疫组库研究中的应用与常见问题。文章从5'端建库的分子机制入手,重点剖析了其在捕获TCR/BCR序列上的独特优势,并系统梳理了从样本处理、文库构建到数据质控全流程中7个最易出错的细节,为研究者提供了一份实用的避坑指南,旨在帮助提升免疫组库数据的质量和可靠性。

weixin_29208327的博客 482

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1352

架构实战(10)——消息处理中的幂等性

  业务场景   首先来看一下典型的业务场景,以订单的处理为例:客户下订单,订单系统处理完订单逻辑后,调用支付系统进行支付。用消息队列实现异步调用,使两个系统解耦的同时,也提升了下单的性能,一举三得。有关消息的使用场景,之前已经介绍。   简化后的处理过程如图:      业务处理场景   在这个简单的业务场景中,保证订单被正确支付至关重要,既不能漏掉某个支付请求,也不能为某个订单支付多次。为了做到“不漏掉”,在消息的生产和消费阶段,需要做额外的处理。   阶段一:消息的生产   

linjingyg的博客 683

【自用】吉林大学计算机系统结构第二章:缓存优化 曲冠南老师版 笔记

容量8KB,2的十三次方,块大小16B,一块用掉四位,剩余2的九次方是标志位,则有512行,每个元素8B,则一块两个元素,a数组150块,b数组152块,不出现容量失效。不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:失效率伪相联=失效率2路。伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。(6) 由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。

weixin_73587775的博客 1616

RocketMQ消息如何幂等处理

1. 背景 笔者在排查生产问题的时候,发现了一个RocketMQ消息重复消费的问题。 生产者发送的消息: { "code":"4500000237", "ctrlOrgCode":"JT", "isInternalSupplier":false, "name":"AAAAAA", "supplierCategoryCode":"0105", "supplierFinanceList":[ { "comOrgCod

qwer123451234123的博客 1302

图神经网络实战——总结 | 图神经网络展望

短短数年时间,图神经网络 (Graph Neural Networks, GNN) 已经成为一种重要的深度学习架构,并且已经广泛应用于各个行业。通过本专栏的学习,能够对图学习和 GNN 领域有一个全面的了解,并能为各种应用设计、构建GNN模型。

盼小辉丶的博客 8545

YOLOv8 | 代码逐行解析(一) | 项目目录构造分析

Hello,大家好这次给大家带来的不是改进,是整个YOLOv8项目的分析,整个系列大概会更新7-10篇左右的文章,从项目的目录到每一个功能代码的都会进行详细的讲解,同时YOLOv8改进系列也突破了三十篇文章,最后预计本专栏持续更新会在年底更新上百篇的改进教程, 所以大家如果没有订阅专栏可以提前订阅以下。下面开始进行YOLOv8逐行解析的一篇——项目目录构造分析在这里给大家推荐我的YOLOv8改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,。

Snu77的博客 4万+

消息总线真的能保证幂等

一、缘起 如《消息总线消息必达》所述,MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认 再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。 为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。 举个栗子: 购买会员卡,上游支付系统负责给用户扣款,下游系...

HelloWorld搬运工 472

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

MQ消息架构设计三(消息总线真的能保证幂等?)

转载自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651960002&idx=1&sn=c0775231bccf002c3178eabe43f1cdcb&chksm=bd2d071e8a5a8e08c3a5287247ea41dee6b2621e6ffafbf909ec1e8a866b7c816eeeea227246&scene=

zenghaolin510824的博客 885

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RocketMQ——消息幂等问题

一、缘起MQ消息必达,架构上有两个核心设计点:(1)消息落地(2)消息超时、重传、确认再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。举个栗子:购买会员卡,上游支付系统负责给用户扣款,下游系统负责给用户发卡,通过MQ异步通知。不管是上半场的ACK丢失,导致MQ收到重复...

东天里的冬天 8082

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【RabbitMQ】保证消息的不重复消费

一、出现非幂等性原因 为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。 可靠性投递机制:比如消息已经发送出去,mq已经收到了,然后mq在返回confirm的时候网络出现闪断,导致broker未收到应答,导致发送两次。 MQ Broker服务与消费端传输消息的过程中出现网络抖动。 消费端故障、异常。 二、生产者 MQ消息发送上半...

千千 6744

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

如何保证消息幂等

消息的幂等性是指无论对同一条消息执行多少次操作,最终的结果都是一致的。具体来说,对于同一条消息的多次处理不会引起不一致或重复的影响。这在分布式系统和消息传递中是非常重要的概念,因为在这些环境中,消息可能会因为网络问题、故障恢复或其他原因而多次传递或处理。

盖丽男 695

消息总线VS消息队列

将消息队列跟消息总线进行了对比,并说明了对于企业应用,封装消息总线的必要性。

VinoYang的专栏 4万+

190. Bus 消息总线机制

消息总线是一种基于发布-订阅模式的通信机制,通过中央通道实现分布式系统或模块化架构中的松耦合组件通信。其核心特点包括解耦性、异步通信、多对多通信和协议无关性,由消息、发布者、订阅者和总线组成。典型应用场景包括微服务间通信、事件驱动架构、前端组件通信和系统集成。与传统通信方式相比,消息总线具有低耦合、异步、易扩展和高可靠性等优势,适合事件驱动场景和高吞吐需求。常见实现技术包括Kafka、RabbitMQ等消息中间件。

weixin_43484713的博客 1800

消息总线(MQ)知多少

1 什么时候用MQ?1.1 MQ的基本概念  消息总线(Message Queue,MQ),是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。1.2 MQ的使用场景场景一:数据驱动的任务依赖  有些任务之间有一定的依赖关系,比如:task3需要使用task2的输出作为输入,tas

代码改变世界 3万+

MQ(消息队列)之如何做到消息幂等

原文链接:https://www.jianshu.com/p/8b77d4583bab?utm_campaign 一、缘起 MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认 再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生...

weixin_40486739的博客 1118

mq幂等mysql_MQ之如何做到消息幂等

一、缘起MQ消息必达,架构上有两个核心设计点:(1)消息落地(2)消息超时、重传、确认再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。举个栗子:购买会员卡,上游支付系统负责给用户扣款,下游系统负责给用户发卡,通过MQ异步通知。不管是上半场的ACK丢失,导致MQ收到重复...

weixin_28956207的博客 136
上一篇: 消息总线能否实现消息必达?
下一篇: 到底什么时候该使用MQ?
涛濤
博客等级 码龄12年 136粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值