分布式事务七_幂等性设计-copy

摘要:
重复发送消息的问题和业务接口的幂等设计消息消费过程的异常点消息的消费确认过程在任何环节都可能出现问题!在实际的业务应用场景中,业务接口的幂等设计通常与可查询操作结合使用。

消息重复发送问题与业务接口的幂等性设计

消息消费流程的异常点


消息的消费确认流程中,任何一个环节都可能会出问题!

方法:对于未确认的消息,采用按规则重新投递的方式进行处理。
问题:消息的重复发送会导致业务处理接口出现重复调用的问题。
消息重复发送的原因
被动方应用接收到消息,业务处理完成后应用出问题,消息中间件不知道消息处理结果,会重新投递消息。
被动方应用接收到消息,业务处理完成后网络出问题,消息中间件收不到消息处理结果,会重新投递消息。
被动方应用接收到消息,业务处理时间过长,消息中间件因消息超时未确认,会再次投递消息。
被动方应用接收到消息,业务处理完成,消息中间件问题导致收不到消息处理结果,消息会重新投递。
被动方应用接收到消息,业务处理完成,消息中间件收到了消息处理结果,但由于消息存储故障导致消息没能成功确认,消息会再次投递。
总结
消息消费过程中产生消息重复发送主要是因为消息接收者成功处理完消息后,消息中间件没能及时更新消息投递状态(也就是消息没能及时ACK确认)导致的。

约束:被动方应用对于消息的业务处理要实现幂等

业务接口的幂等性设计
对于存在同一请求数据会发生重复调用的业务接口,接口的业务逻辑要实现幂等性设计。 在实际的业务应用场景中,业务接口的幂等性设计,常结合可查询操作一起使用。 场景举例

支付订单创建:商户编号 + 商户订单号 + 订单状态
订单更新处理:平台订单号 + 订单状态
会计系统记账:系统来源 + 请求号
极端情况:消息重发也得有次数限制,要不然就变成了死循环。
对于超过重发次限制的消息,进入DLQ,等待人工干预或延后定期处理
方式
根据业务来实现幂等
增加消息表来实现幂等
————————————————
版权声明:本文为CSDN博主「chenshiying007」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27384769/article/details/79307340

免责声明:文章转载自《分布式事务七_幂等性设计-copy》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分布式事务九_基于可靠消息的最终一致性代码-copy支付宝 分布式事务服务 DTS 一copy下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ucGUI的视窗管理回调机制学习

要熟悉窗口的回调机制,重点理解回调函数作用,消息传递机制。 uC/GUI的窗口管理是个单独的软件,不是uC/GUI的基本组成部分。代码见\uCGUI\GUI\WM。当使用uC/GUI窗口管理时,任何能显示在显示终端上的内容都包含在一个窗口里面,这个窗口是LCD屏幕上的一个给用户画图或显示目标的区域。窗口能够是任何尺寸的,能够一次在屏幕上显示多个窗口,也能够在...

rsyslog Properties 属性:

rsyslog Properties 属性: Data items 在rsyslog 是被称为属性,它们有不同的起源。最重要的是那些收到的消息。 但是也有其他的,当你需要访问数据项,你需要访问各自的属性。 属性用于: 1.模板 2.条件语句 属性名字是不区分大小写的 消息属性: 那些通过rsyslog 解析从原始消息提取,所有的消息属性从第...

Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程

Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明; Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例,设计类图如下: 面向对象的Reactor方案设计 我们先看看面向对象的设计方案,想想为什么这么做; 拿出Reactor事件驱动的模式设计图...

windows ハンドル

windows句柄 这篇文章是我在学习的时候为了以后忘记所以把当时的理解记录下来。一定有不正确的地方,所以仅供参考。 我们初学VC++是经常遇到一些我们在标准C++中没有的数据类型,如句柄,消息。 句柄:我们先看看Winnt.h有关句柄的定义。 #ifdefSTRICTtypedefvoid*HANDLE;#defineDECLARE_HANDLE(...

kafka基础知识梳理

一.Kafka的基本概念 关键字: 分布式发布订阅消息系统;分布式的,分区的消息服务 Kafka是一种高吞吐量的分布式发布订阅消息系统,使用Scala编写。对于熟悉JMS(Java Message Service)规范的同学来说,消息系统已经不是什么新概念了(例如ActiveMQ,RabbitMQ等)。Kafka拥有作为一个消息系统应该具备的功能,但是确...

Javaer 进阶必看的 RocketMQ ,就这篇了

每个时代,都不会亏待会学习的人。 大家好,我是 yes。 继上一篇 头条终面:写个消息中间件 ,我提到实现消息中间件的一些关键点,今天就和大家一起深入生产级别消息中间件 - RocketMQ 的内核实现,来看看真正落地能支撑万亿级消息容量、低延迟的消息队列到底是如何设计的。 这篇文章我会先介绍整体的架构设计,然后再深入各核心模块的详细设计、核心流程的剖析...