如何保证支付服务和交易服务订单状态一致?

server/2024/10/18 18:25:31/

消息传给消费者,消费者自己弄丢

业务幂等

所有的业务都应该保证幂等性,

如何保障业务幂等性

非幂等业务表单重复提交,在进入表单之前生成唯一标识,未token,携带token进行请求,执行表单提交,把token删掉,重复提交就无法识别就请求失败了

通过业务做判断实现幂等

如果订单已经支付过就不需要再重复支付,所以在先要做订单状态查询,然后判断是否未支付,如果未支付才需求修改业务状态

总结

首先,支付服务会在用户支付成功后利用mq消息通知交易服务,完成订单状态同步,

其次为了保证mq消息的可靠性,采用生产者确认机制,消费者确认,消费者失败重试等策略,确保消息投递和处理的可靠性,同时也开启了mq的持久化,避免因服务宕机导致消息丢失,

最后我们还在交易服务更新订单状态时做了业务幂等判断,避免因消息重复消费导致订单状态异常


http://www.ppmy.cn/server/105456.html

相关文章

使用go实现TCP服务器

为什么TCP服务器使用go实现? 使用 Go 实现 TCP 服务器有多个优势,这些优势主要来自于 Go 语言本身的设计理念及其标准库提供的功能。以下是几个主要的优点: 并发模型: Go 提供了 goroutines 和 channels,使得编写高并发网络应用变…

react面试题二

一、React的setState是同步还是异步的? React的setState行为在React的不同版本和不同的使用场景下有所不同,但通常可以概括为在React的事件处理函数中,setState是异步的;在React的生命周期函数和合成事件之外的函数中,…

使用Jupyter Notebook实现Python编程

目录 1. 安装Anaconda 2. 启动Jupyter Notebook 3. 调试Python代码: 4. 定义一个简单的python类 ​5. 在控制台运行代码,并从命令行接受参数 6. 调用其他py文件中的类 ​7. conda环境切换和迁移 1. 安装Anaconda 到Anaconda官网下载安装包:Download Anaconda Distri…

react面试题三

一、请解释React的虚拟DOM及其作用。 React的虚拟DOM(Virtual DOM)是React框架中的一个核心概念,它是对真实DOM的一种轻量级内存表示。React使用虚拟DOM来减少直接操作真实DOM的次数,从而提高应用的性能和效率。下面详细解释虚拟D…

Vue vue/cli3 与 vue/cli4 v-for 和 v-if 一起使用冲突

问题描述 异常信息:[vue/no-use-v-if-with-v-for] The this.$router.options.routers expression inside v-for directive should be replaced with a computed property that returns filtered array instead. You should not mix v-for with v-if.eslint-plugin-v…

出现 2003 - Can’t connect to MySQL server on ‘xxx‘(10060) 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 sql链接远程服务器的时候,出现如下问题: 2003 - Can’t connect to MySQL server on xxx(10060)截图如下所示: 2. 原理分析 错误代码 10060 表示“连接超时”,说明客户端在尝试连接到服务器时,服务器没有响应或者响…

【论文阅读】DaST: Data-free Substitute Training for Adversarial Attacks(2020)

摘要 Machine learning models(机器学习模型) are vulnerable(容易受到) to adversarial examples(对抗样本). For the black-box setting(对于黑盒设置), current substitute atta…

getchar(),putchar(),EOF的详细解释

文章目录 getchar(),putchar(),EOF的意义和作用一、相关函数putchar( )getchar() 二、EOF 的值三、总结 getchar(),putchar(),EOF的意义和作用 在 C 语言中,EOF 是 End Of File 的缩写,即文件结束标志。 在读取文件时&#xff0…