修改Seata在nacos配置中心配置将client.undo.logSerialization=jackson修改为client.undo.logSerialization=kryo

文章插图
微服务整合Seata前期准备在每个微服务所连的库 , 新建一张表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_logCREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;聚合工程搭建。。。。
项目结构
- ybchen-common:公共模块
- ybchen-order-service:订单微服务
- ybchen-product-service:商品微服务

文章插图
Seata依赖<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><dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.1</version></dependency><!-- seata 自身序列化bug问题-开始 --><dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.2</version></dependency><dependency><groupId>de.javakaffee</groupId><artifactId>kryo-serializers</artifactId><version>0.42</version></dependency><!-- seata 自身序列化bug问题-结束 -->分布式事务演示关键代码片段
order-service
@AutowiredOrderMapper orderMapper;@AutowiredProductStockControllerFeign productStockControllerFeign;@Override//开启分布式事务 Seta AT模式@GlobalTransactionalpublic ReturnT<String> add() {OrderDO orderDO = new OrderDO();int outTradeNo = new Random().nextInt(1000);orderDO.setOutTradeNo("T" + outTradeNo);orderDO.setCreateTime(new Date());int rows = orderMapper.insert(orderDO);if (rows > 0) {//扣减商品库存ReturnT<String> reduceReturn = productStockControllerFeign.reduce();if (ReturnT.isSuccess(reduceReturn)) {log.info("购买成功");//TODO 模拟异常方式二//int num = 1 / 0;return ReturnT.buildSuccess("购买成功");}// 解决全局拦截器问题 , 通过接口响应状态码 , 来判断是否主动抛异常!!!!!!!if (reduceReturn.getCode() != 0) {log.info("扣减商品库存失败 , 接口响应:{}", reduceReturn);throw new BizException(110, "扣减商品库存失败");}log.info("扣减商品库存失败");return ReturnT.buildError("扣减商品库存失败");}log.info("购买失败");return ReturnT.buildError("购买失败");}product-service
@AutowiredProductStockMapper productStockMapper;@Overridepublic ReturnT<String> reduceProductStock() {ProductStockDO stockDO = new ProductStockDO();stockDO.setProductId(10086);stockDO.setBuyNum(1);stockDO.setCreateTime(new Date());int rows = productStockMapper.insert(stockDO);//TODO 模拟异常方式一//int num = 1 / 0;if (rows > 0) {log.info("扣减商品库存成功 , rows=" + rows);return ReturnT.buildSuccess("扣减商品库存成功");} else {log.info("扣减商品库存失败 , rows=" + rows);return ReturnT.buildError("扣减失败");}}
经验总结扩展阅读
- MassTransit | .NET 分布式应用框架
- 之四 2流高手速成记:SpringBoot整合redis及mongodb
- SpringBoot整合ES+Kibana
- 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的实践
- 微服务系列之分布式日志 ELK
- Dubbo2.7详解
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 撸了一个简易的配置中心,顺带整合到了SpringCloud
- 女宝宝优雅名字合集 易记女孩取名整合汇总
- 【Spring boot】整合tomcat底层原理