JAVA全系列 教程
3762个小节阅读:7094.7k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
接下来我们在项目中引入Seata提供分布式事务管理:
在与分布式事务有关的模块中(服务的生产者和消费者,包括订单服务模块、支付服务模块,订单API模块)都引入Seata的依赖。
xxxxxxxxxx
<!-- seata -->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<!-- 版本较低因此排除 -->
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
在与分布式事务有关的配置文件(shopping_pay_service-dev.yaml
、shopping_order_service-dev.yaml
、shopping_order_customer_api-dev.yaml
)中都加入seata配置。
xxxxxxxxxx
# seata配置
seata:
registry:
type: nacos
nacos:
# nacos地址
server-addr: 192.168.0.99:8848
# 应用名字
application: seata-tc-server
# 分组
group: DEFAULT_GROUP
# 事务组,根据这个获取TC服务的Cluster名称
tx-service-group: seata-demo
service:
# 事务组与TC服务 Cluster 的映射关系
vgroup-mapping:
seata-demo: BJ
# 开启数据源代理的XA模式
data-source-proxy-mode: XA
在需要添加分布式事务的方法上方添加注解@GlobalTransactional
xxxxxxxxxx
/**
* 支付成功的回调方法,用户扫码支付后支付宝调用的
* @param request
* @return
*/
@PostMapping("/success/notify")
@GlobalTransactional
public BaseResult successNotify(HttpServletRequest request){
// 1.验签
Map<String, String[]> parameterMap = request.getParameterMap();
// 新map
Map<String, String[]> newMap = new HashMap();
newMap.putAll(parameterMap);
Map<String, Object> paramMap = new HashMap();
paramMap.put("requestParameterMap",newMap);
zfbPayService.checkSign(paramMap);
String trade_status = request.getParameter("trade_status");// 订单状态
String out_trade_no = request.getParameter("out_trade_no");// 订单编号
// 如果支付成功
if (trade_status.equals("TRADE_SUCCESS")){
// 2.修改订单状态
Orders orders = ordersService.findById(out_trade_no);
orders.setStatus(2); // 订单状态为已付款
orders.setPaymentType(2);// 支付宝支付
orders.setPaymentTime(new Date());
ordersService.update(orders);
// int i = 1/0;
// 3.添加交易记录
Payment payment = new Payment();
payment.setOrderId(out_trade_no); // 订单编号
payment.setTransactionId(out_trade_no); // 交易号
payment.setTradeType("支付宝支付"); // 交易类型
payment.setTradeState(trade_status); // 交易状态
payment.setPayerTotal(orders.getPayment()); // 付款金额
payment.setContent(JSON.toJSONString(request.getParameterMap())); // 支付详情
payment.setCreateTime(new Date()); // 支付时间
zfbPayService.addPayment(payment);
}
return BaseResult.ok();
}
测试分布式事务是否生效