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

文章插圖
微服務(wù)整合Seata前期準(zhǔn)備在每個(gè)微服務(wù)所連的庫(kù) , 新建一張表
-- 注意此處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;聚合工程搭建。。。。
項(xiàng)目結(jié)構(gòu)
- ybchen-common:公共模塊
- ybchen-order-service:訂單微服務(wù)
- ybchen-product-service:商品微服務(wù)

文章插圖
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問(wèn)題-開始 --><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問(wèn)題-結(jié)束 -->分布式事務(wù)演示關(guān)鍵代碼片段
order-service
@AutowiredOrderMapper orderMapper;@AutowiredProductStockControllerFeign productStockControllerFeign;@Override//開啟分布式事務(wù) 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) {//扣減商品庫(kù)存ReturnT<String> reduceReturn = productStockControllerFeign.reduce();if (ReturnT.isSuccess(reduceReturn)) {log.info("購(gòu)買成功");//TODO 模擬異常方式二//int num = 1 / 0;return ReturnT.buildSuccess("購(gòu)買成功");}// 解決全局?jǐn)r截器問(wèn)題 , 通過(guò)接口響應(yīng)狀態(tài)碼 , 來(lái)判斷是否主動(dòng)拋異常!!!!!!!if (reduceReturn.getCode() != 0) {log.info("扣減商品庫(kù)存失敗 , 接口響應(yīng):{}", reduceReturn);throw new BizException(110, "扣減商品庫(kù)存失敗");}log.info("扣減商品庫(kù)存失敗");return ReturnT.buildError("扣減商品庫(kù)存失敗");}log.info("購(gòu)買失敗");return ReturnT.buildError("購(gòu)買失敗");}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("扣減商品庫(kù)存成功 , rows=" + rows);return ReturnT.buildSuccess("扣減商品庫(kù)存成功");} else {log.info("扣減商品庫(kù)存失敗 , rows=" + rows);return ReturnT.buildError("扣減失敗");}}
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- MassTransit | .NET 分布式應(yīng)用框架
- 之四 2流高手速成記:SpringBoot整合redis及mongodb
- SpringBoot整合ES+Kibana
- 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的實(shí)踐
- 微服務(wù)系列之分布式日志 ELK
- Dubbo2.7詳解
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 擼了一個(gè)簡(jiǎn)易的配置中心,順帶整合到了SpringCloud
- 女寶寶優(yōu)雅名字合集 易記女孩取名整合匯總
- 【Spring boot】整合tomcat底層原理
