商城系统分布式下单
一、锁定库存的sql
select * from ware where id={id} and total-lock>0
update ware set lock=lock+{num} where id={id} and total-lock>={num}
二、下单服务要用分布式事务,因为seat的二阶段提交要说很多资源,会造成处理变成串行化,高并发下不使用,采用柔性事务+消息队列最终一致化方案
到这里终于懂了,采用柔性事务+消息队列最终一致化方案就是当事务中的某一个操作失败后,采用消息队列补偿机制,通过发送消息将执行的操作进行反省操作 达到回滚的目的。
这里有两种方案:一、当try操作失败以后,在catch中发送一条消息,消息处理方收到消息以后,将数据还原
二、在try的时候,直接发送一条消息,而不是登发生异常以后再发送,这条消息是发到延迟队列的,这样做的好处是,不用再catch中做补偿了,延时队列中的消息到时间以后,判断数据状态,需要补偿的进行数据的回滚,不需要的直接忽略。
三、采用延时队列的好处,可以实现自动关单的功能同时还能实现消息补偿
其实分布式事务 就是把原先在一个方法中的事务 分到了不同的服务中,这个时候就要考虑,这个时候就要考虑被调用方 和调用方 发生错误回滚的不同情况,
@Transactional
public void test (){save(classA);feginB();feginC();feginD();
}
@Transactional
public R feginB(){
doService()
sendMessage();
}
@Transactional
public R feginC(){
doService()
sendMessage();
}
@Transactional
public R feginD(){
doService()
sendMessage();
}
fegin中的消息队列就是为了fegin事务回滚用的
比如feginC()发生错误,这时候需要回滚feginB,这时候可以采用在test()方法中catch异常然后发送消息,进行数据的补偿回滚,我们采用在fegin主动调用延时队列的方式,就不用catch了,并且还可以做到期自动关单
发送消息是为了回滚,需要新增表专门记录需要回滚的数据id是哪个,回滚数据的值为哪些。
为什么延迟队列用能做到期自动关单呢,其实把下单逻辑当成一个大事务来看,feginD就是支付方法,到期未支付就是fefinD发生异常,所以也需要发送消息就行数据的补偿,和大逻辑就吻合了。
另一个问题feginC中发生了异常,这时候就不能catch异常,必须抛异常使得test方法回滚,因为feginC也是事务方法,所以feginC的方法也回滚了。如果feginC中是循环发送消息的,也没关系,因为消息记录表中的数据也回滚了,当处理消息的时候 在消息记录表中查不到数据,也不会过多处理。这里发送消息的时候处理发送消息记录表中的id,最好把主表的相关数据也传过去,要不然容易造成主表记录没有回滚
解锁库存 三种情况
1、到期自动关单
2、用户手动关单
3、因为调用feginC失败,需要将feginB回滚
一个事务中调用fegin fegin也是一个事务,并且fegin中调用了消息队列
相关文章:
商城系统分布式下单
一、锁定库存的sql select * from ware where id{id} and total-lock>0 update ware set locklock{num} where id{id} and total-lock>{num} 二、下单服务要用分布式事务,因为seat的二阶段提交要说很多资源,会造成处理变成串行化,高并发…...

Java自学第5课:Java web开发环境概述,更换Eclipse版本
1 Java web开发环境 前面我们讲了java基本开发环境,但最终还是要转到web来的,先看下怎么搭建开发环境。 这个图就是大概讲了下开发和应用环境,其实很简单,对于一台裸机,win7 系统的,首先第1步,…...
[网鼎杯 2020 青龙组]AreUSerialz
[网鼎杯 2020 青龙组]AreUSerialz <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename;protected $content;function __construct() {$op "1";$filename "/tmp/tmpfile";$content…...

使用Kotlin与Unirest库抓取音频文件的技术实践
目录 摘要 一、Kotlin与Unirest库概述 二、使用Kotlin和Unirest抓取音频文件 1、添加Unirest依赖 2、发送HTTP请求获取音频文件 3、保存音频文件 三、完整代码示例 四、注意事项 结论 摘要 本文详细阐述了如何使用Kotlin编程语言与Unirest库抓取网络上的音频文件。首…...
gdb调试常用命令
基本命令 1)进入GDB #gdb test test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码 (gdb) l 源码会进行行号提示。 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这…...

CH11_重构API
将查询函数和修改函数分离(Separate Query from Modifier) function getTotalOutstandingAndSendBill() {const result customer.invoices.reduce((total, each) > each.amount total, 0);sendBill();return result; }function totalOutstanding() …...

UPLOAD-LABS1
less1 (js验证) 我们上传PHP的发现不可以,只能是jpg,png,gif(白名单限制了) 我们可以直接去修改限制 在查看器中看到使用了onsubmit这个函数,触发了鼠标的单击事件,在表单提交后马上调用了re…...
WordPress相关文章推荐
首先 WordPress 本身并没有相关文章的推荐功能,网站之所以需要这样的功能出于两个原因,一方面是推荐相关的内容越优质,访客的留存和继续阅读将会增强,同样从优化角度来说会更加有利于搜索引擎抓取时对页面质量的提升,毕…...

【QML】Qt和QML获取操作系统类型
1. Qt获取系统类型 //方法 QSysInfo::productType()//举例: if(QSysInfo::productType() "windows") {qDebug() << "windows system"; }官方说明: [static] QString QSysInfo::productType() Returns the product name of …...

CSS 显示、定位、布局、浮动
一、CSS 显示: CSS display属性设置元素应如何显示;CSS visibility属性指定元素应可见还是隐藏。隐藏元素可以通过display属性设置为“none”,也可以通过visibility属性设置为“hidden”。两者的区别:visibility:hidden可以隐藏某…...
Java 学习笔记
文章目录 一、集合1.1 List1.1.1 ArrayList1.1.2 Vector1.1.3 LinkedList 1.2 Deque1.3 Set1.4 Map1.4.1 HashMap1.4.2 LinkedHashMap 1.5 注意事项 二、函数式接口和 Lambda 表达式三、方法引用3.1 静态方法引用3.2 实例方法引用3.2 特定类型的方法引用3.4 构造器引用 四、Str…...

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet
1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面,让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…...
Go语言函数参数
文章目录 Go语言函数参数1. **函数参数的定义**:2. **参数的数量**:3. **参数的数据类型**:4. **参数的命名**:5. **参数的传递**:6. **参数的传递方式**:7. **空白标识符**: Go语言函数参数 在…...

【遍历二叉树的非递归算法,二叉树的层次遍历】
文章目录 遍历二叉树的非递归算法二叉树的层次遍历 遍历二叉树的非递归算法 先序遍历序列建立二叉树的二叉链表 中序遍历非递归算法 二叉树中序遍历的非递归算法的关键:在中序遍历过某个结点的整个左子树后,如何找到该结点的根以及右子树。 基本思想&a…...

数模之线性规划
线性规划 优化类问题:有限的资源,最大的收益 例子: 华强去水果摊找茬,水果摊上共3个瓜,华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值,问话消耗…...

【C++】AVL树的4中旋转调整
文章目录 前提一、AVL树的结构定义二、AVL的插入(重点)1. 插入的结点在较高左子树的左侧(右单旋)2. 新节点插入较高右子树的右侧(左单旋)3.新结点插入较高右子树的左侧(先右单旋再左单旋&#x…...

【MATLAB源码-第69期】基于matlab的LDPC码,turbo码,卷积码误码率对比,码率均为1/3,BPSK调制。
操作环境: MATLAB 2022a 1、算法描述 本文章介绍了卷积码、Turbo码和LDPC码。以相同的码率仿真这三种编码,并对比其误码率性能 信源输出的数据符号(二进制)是相互独立和等概率的; 信道是加性白高斯噪声信道&#…...
Java获取时间戳、字符串和Date对象的相互转换、日期时间格式化、获取年月日
获取时间戳(自1970年1月1日经历的毫秒数值) package org.example;import java.util.Date;public class Main {public static void main(String[] args) {Date date1 new Date(1699540662210L);System.out.println(date1.getTime());Date date2 new Dat…...
用c语言实现矩阵转置
下面是在 C 语言中实现矩阵转置的示例代码: #include <stdio.h> #define ROWS 3 #define COLS 3 void transpose(int matrix[ROWS][COLS]) { int temp; for(int i0; i<ROWS; i) { for(int j0; j<i; j) { temp matrix[i][j]; matrix[i][j] matrix[j]…...
蓝桥杯官网练习题(移动距离)
题目描述 X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3, 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为 6 时,开始情形如下: 1 2 3 4 5 6 12 …...
Ubuntu 下开机自动执行命令的方法
Ubuntu 下开机自动执行命令的方法(使用 crontab) 在日常使用 Ubuntu 或其他 Linux 系统时,我们常常需要让某些程序或脚本在系统启动后自动运行。例如:启动 Clash 代理、初始化服务、定时同步数据等。 本文将介绍一种简单且常用的…...
MongoDB检查慢查询db.system.profile.find 分析各参数的作用
db.system.profile.find() 是分析 MongoDB 性能的关键工具,其返回的文档包含丰富的性能指标。下面是对各参数的详细解释和优化建议: {"op": "query", // 操作类型(query/update/remove)"ns": "test.users", // 命名…...

2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
项目背景:近年来,云计算、AI人工智能、大数据等信息技术的不断发展、各行各业的信息电子化的步伐不断加快、信息化的水平不断提高,网络安全的风险不断累积,金融证券行业面临着越来越多的威胁挑战。特别是近年以来,开源…...

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面
🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑 文章目录 🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑♈前言♈♈调取Deepseek大模型♈♒准备工作♒♒调用API♒ ♈将模型嵌入到ui界面中♈♈…...

[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力
【论文速读】利用负信号蒸馏:用REDI框架提升LLM推理能力 论文信息 arXiv:2505.24850 cs.LG cs.AI cs.CL Harnessing Negative Signals: Reinforcement Distillation from Teacher Data for LLM Reasoning Authors: Shuyao Xu, Cheng Peng, Jiangxuan Long, Weidi…...
ClusterRole 和 ClusterRoleBinding 的关系及使用
ClusterRole 和 ClusterRoleBinding 是 Kubernetes 中用于控制集群范围权限的两个重要资源,它们共同构成了 Kubernetes RBAC (基于角色的访问控制) 系统的核心部分。 两者的关系 ClusterRole 定义了一组权限规则,指定了可以对哪些资源执行哪些操作 Clu…...
[论文阅读] 人工智能 | 搜索增强LLMs的用户偏好与性能分析
【论文解读】Search Arena:搜索增强LLMs的用户偏好与性能分析 论文信息 作者: Mihran Miroyan, Tsung-Han Wu, Logan King等 标题: Search Arena: Analyzing Search-Augmented LLMs 来源: arXiv preprint arXiv:2506.05334v1, 2025 一、研究背景:…...

python打卡day46@浙大疏锦行
知识点回顾: 不同CNN层的特征图:不同通道的特征图什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。通道注意力:模型的定义和插入的位置通道注意力后的特征图和热力图 内…...
如何区分虚拟货币诈骗与经营失败?
首席数据官高鹏律师团队编著 00后大学生杨启超在公有链上发行BFF虚拟币,因在24秒内撤回流动性导致他人损失5万USDT币,被河南南阳法院以诈骗罪判处有期徒刑4年6个月。庭审中,辩护律师手持合约地址记录据理力争:“公有链发币自由、…...

小白如何在cursor中使用mcp服务——以使用notion的api为例
1. 首先安装node.js,在这一步的时候不要勾选不要勾选 2. 安装完之后,前往notion页面 我的创作者个人资料 | Notion 前往集成页面,添加新集成,自己输入名字,选择内部 新建完之后,进入选择只读 复制密匙 然后前往cursor页面 新建…...