国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

做局域網(wǎng)網(wǎng)站教程東莞網(wǎng)絡優(yōu)化調(diào)查公司

做局域網(wǎng)網(wǎng)站教程,東莞網(wǎng)絡優(yōu)化調(diào)查公司,python免費下載安裝,浙江華企網(wǎng)站做的咋樣目錄 準備調(diào)整db配置準備創(chuàng)建數(shù)據(jù)庫 seata配置nacos配置confi.txt下載向nacos推送配置的腳本 啟動seata新建項目order-seata項目 訂單項目數(shù)據(jù)庫腳本pom.xmlapplication.yml啟動類實體類dao類service類controller類feign類mapper類 stock-seata 庫存項目數(shù)據(jù)庫腳本pom.xmlappli…

目錄

  • 準備
  • 調(diào)整db配置
    • 準備創(chuàng)建數(shù)據(jù)庫
  • seata配置nacos
    • 配置confi.txt
    • 下載向nacos推送配置的腳本
  • 啟動seata
  • 新建項目
  • order-seata項目 訂單項目
    • 數(shù)據(jù)庫腳本
    • pom.xml
    • application.yml
    • 啟動類
    • 實體類
    • dao類
    • service類
    • controller類
    • feign類
    • mapper類
  • stock-seata 庫存項目
    • 數(shù)據(jù)庫腳本
    • pom.xml
    • application.yml
    • 啟動類
    • 實體類
    • dao類
    • service類
    • controller類
    • mapper類
  • 測試
  • 特殊情況
  • 分布式事務
    • order-seata項目變動
      • pom.xml
      • application.yml
      • controller
    • stock-seata項目變動
      • pom.xml
      • application.yml
    • 腳本
    • 效果
  • 分布式事務原理
    • nacos配置問題
    • seata的幾個表都是什么情況

準備

名稱版本
Nacos1.4.5
seata1.4.0
alibabacloud2.2.5.RELEASE
  • 本博客版本

seata官網(wǎng)地址
seata安裝包下載
在這里插入圖片描述

  • 沒有l(wèi)inux服務器,可本地搭建玩一下
  • 注意alibaba版本跟seata版本一定要嚴格控制,不然會出現(xiàn)一些奇奇怪怪的問題

默認數(shù)據(jù)存儲分為2鐘,一種是存在bin目錄下的root.data文件里面,還有一種是db方式,本文使用db模式

調(diào)整db配置

  • 注意mysql數(shù)據(jù)庫的版本得5.7以上。-
  • 修改配置文件之前,別慌,先copy一遍再說,養(yǎng)成好習慣
    在這里插入圖片描述
  • 調(diào)整模式為db, 修改db對應的配置

準備創(chuàng)建數(shù)據(jù)庫

在這里插入圖片描述
mysql腳本下載地址
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 先把整個項目下載,然后到這個目錄下,找到mysql.sql

seata配置nacos

在這里插入圖片描述

  • 先備份一下配置文件
    在這里插入圖片描述
  • 刪除其他沒有用的配置,調(diào)整一下配置

配置confi.txt

到之前下載好的依賴包中copy對應的config.txt文件,放到seata目錄下
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 修改存儲類型
    在這里插入圖片描述
  • 調(diào)整為自己對應的url地址,以及賬號和密碼

下載向nacos推送配置的腳本

在這里插入圖片描述

  • 將該腳本移動到seata的conf配置下
    在這里插入圖片描述
sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -t seata -u nacos -w nacos
# h: nacos服務ip.
# p: nacos服務端口號.
# g: 想要的分組信息.
# t: 第一步新建的命名空間.
# u: nacos登錄名.
# w: nacos登錄密碼

如果是本地沒有做任務的修改,直接運行就行
在這里插入圖片描述

  • 大概運行5分鐘左右
    在這里插入圖片描述
  • 很奇葩的設計,搞不懂為什么不單獨弄一個文件來存儲所有的內(nèi)容,而是key value的方式,看起來很亂,建議單獨創(chuàng)建一個seata的命令空間用來存儲這些配置

啟動seata

在這里插入圖片描述
在這里插入圖片描述

  • window啟動用bat文件
    在這里插入圖片描述
  • 可以看出默認端口為8091,也可以自定義
    在這里插入圖片描述
  • 在服務列表中,就可以看到多了一個seata-server的服務
  • 因為window版本,不好演示集群方式,所以我這里的集群數(shù)量是1

新建項目

在這里插入圖片描述
在之前的基礎上新增一個seata項目
在這里插入圖片描述

  • 注意,新增后,該項目是沒有藍點的
    在這里插入圖片描述

  • 添加+號,解決藍點問題
    在這里插入圖片描述

  • 自己手動補一下seata這個目錄

  • 創(chuàng)建模塊order-seata和stock-seata

order-seata項目 訂單項目

在這里插入圖片描述

  • 新增這兩個項目

在這里插入圖片描述

  • 庫存項目的結(jié)構

數(shù)據(jù)庫腳本

create database seata_order;
use seata_order;CREATE TABLE `order_tbl` (`id` int(11) NOT NULL AUTO_INCREMENT,`product_id` varchar(200) DEFAULT NULL,`total_amount` decimal(10,3) DEFAULT NULL,`statu` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
  • 新增數(shù)據(jù)庫

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.lcs.springcloud</groupId><artifactId>springcloudalibaba</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>order-nacos</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-ribbon</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies><build><finalName>order</finalName></build>
</project>

application.yml

server:port: 8190spring:application:name: order-seatacloud:nacos:discovery:namespace: publicserver-addr: localhost:8848username: nacospassword: nacosdatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:db-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.10.108:3306/seata_order?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useCursorFetch=trueusername: rootpassword: 12312312
mybatis:mapper-locations: classpath:mapper/*.xml

啟動類

package com.lcs.springcloud;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@MapperScan("com.lcs.springcloud.dao")
@EnableFeignClients
public class OrderSeataApplication {public static void main(String[] args) {SpringApplication.run(OrderSeataApplication.class);}
}

實體類

package com.lcs.springcloud.entity;import java.math.BigDecimal;public class OrderTbl {private Integer id;private String product_id;private BigDecimal total_amount;private Integer statu;public OrderTbl() {}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getProduct_id() {return product_id;}public void setProduct_id(String product_id) {this.product_id = product_id;}public BigDecimal getTotal_amount() {return total_amount;}public void setTotal_amount(BigDecimal total_amount) {this.total_amount = total_amount;}public Integer getStatu() {return statu;}public void setStatu(Integer statu) {this.statu = statu;}@Overridepublic String toString() {return "OrderTbl{" +"id=" + id +", product_id='" + product_id + '\'' +", total_amount=" + total_amount +", statu=" + statu +'}';}
}

dao類

package com.lcs.springcloud.dao;import com.lcs.springcloud.entity.OrderTbl;
import org.springframework.stereotype.Repository;@Repository
public interface OrderDao {void insert(OrderTbl orderTbl);
}

service類

package com.lcs.springcloud.service;import com.lcs.springcloud.dao.OrderDao;
import com.lcs.springcloud.entity.OrderTbl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class OrderService {@AutowiredOrderDao orderDao;public void insert(OrderTbl orderTbl) {orderDao.insert(orderTbl);}
}

controller類

package com.lcs.springcloud.controller;import com.lcs.springcloud.entity.OrderTbl;
import com.lcs.springcloud.feign.StockOpenFeign;
import com.lcs.springcloud.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredOrderService orderService;@AutowiredStockOpenFeign stockOpenFeign;@RequestMapping("/add")public String add(){OrderTbl orderTbl = new OrderTbl();orderTbl.setProduct_id("10");orderTbl.setTotal_amount(new BigDecimal(3000));orderTbl.setStatu(0);orderService.insert(orderTbl);String reduct = stockOpenFeign.reduct(orderTbl.getProduct_id());return "add order "+reduct;}
}

feign類

package com.lcs.springcloud.controller;import com.lcs.springcloud.entity.OrderTbl;
import com.lcs.springcloud.feign.StockOpenFeign;
import com.lcs.springcloud.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredOrderService orderService;@AutowiredStockOpenFeign stockOpenFeign;@RequestMapping("/add")public String add(){OrderTbl orderTbl = new OrderTbl();orderTbl.setProduct_id("10");orderTbl.setTotal_amount(new BigDecimal(3000));orderTbl.setStatu(0);orderService.insert(orderTbl);String reduct = stockOpenFeign.reduct(orderTbl.getProduct_id());return "add order "+reduct;}
}

mapper類

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcs.springcloud.dao.OrderDao"><!-- 主鍵自增長的插入 --><insert id="insert" parameterType="com.lcs.springcloud.entity.OrderTbl" useGeneratedKeys="true" keyProperty="id">insert into order_tbl(product_id,total_amount,statu) values(#{product_id},#{total_amount},#{statu});</insert>
</mapper>

stock-seata 庫存項目

在這里插入圖片描述

數(shù)據(jù)庫腳本

 create database seata_stock;
use seata_stock;CREATE TABLE `stock_tbl` (`id` int(11) NOT NULL AUTO_INCREMENT,`product_id` varchar(200) DEFAULT NULL,`count` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8INSERT INTO `seata_stock`.`stock_tbl` (`id`, `product_id`, `count`) VALUES (1, '10', 100);

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.lcs.springcloud</groupId><artifactId>springcloudalibaba</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>stock-seata</artifactId><packaging>jar</packaging><dependencies><!-- Nacos服務注冊發(fā)現(xiàn)--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--繼承了父項目,不需要添加版本號--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2.3.5.RELEASE</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version><!-- 排除沖突的jar包文件--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></exclusion></exclusions></dependency><!--Mysql驅(qū)動器--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version><scope>runtime</scope></dependency><!-- druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.9</version></dependency></dependencies><build><finalName>order-seata</finalName></build>
</project>

application.yml

server:port: 8200spring:application:name: stock-seatacloud:nacos:discovery:namespace: publicserver-addr: localhost:8848username: nacospassword: nacosdatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:db-type: mysqldriver-class-name: com.mysql.jdbc.Driver#url: jdbc:mysql://10.153.96.31:3306/iomm-collection?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useCursorFetch=trueurl: jdbc:mysql://112.74.51.171:3306/seata_stock?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useCursorFetch=trueusername: rootpassword: Zy_746498
mybatis:mapper-locations: classpath:mapper/*.xml

啟動類

package com.lcs.springcloud;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.lcs.springcloud.dao")
public class StockSeataApplication {public static void main(String[] args) {SpringApplication.run(StockSeataApplication.class,args);}
}

實體類

package com.lcs.springcloud.entity;public class StockTbl {private Integer id;private String product_id;private Integer count;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getProduct_id() {return product_id;}public void setProduct_id(String product_id) {this.product_id = product_id;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}
}

dao類

package com.lcs.springcloud.dao;import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;@Repository
public interface StockDao {void updateStock(@Param("product_id")String product_id);
}

service類

package com.lcs.springcloud.service;import com.lcs.springcloud.dao.StockDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class StockService {@AutowiredStockDao stockDao;public String updateStock(String product_id) {try {stockDao.updateStock(product_id);return "扣減庫存成功";}catch (Exception e){return "更新庫存失敗";}}
}

controller類

package com.lcs.springcloud.controller;import com.lcs.springcloud.service.StockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/stock")
public class StockController {@AutowiredStockService stockService;@Value("${server.port}")String port;@RequestMapping("/reduct")public String reduct(@RequestParam(value = "product_id") String product_id){return stockService.updateStock(product_id);}}

mapper類

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcs.springcloud.dao.StockDao"><!-- 主鍵自增長的插入 --><update id="updateStock"  parameterType="java.lang.String" >update stock_tbl  SET count= count-1 where product_id=#{product_id}</update>
</mapper>

測試

前提: 保持已經(jīng)開啟nacos,不知道的可以先學習一下nacos
在這里插入圖片描述

  • 訂單表 默認為空
    在這里插入圖片描述
  • 庫存表默認為100個庫存

運行http://localhost:8190/order/add
在這里插入圖片描述
結(jié)果如下:
在這里插入圖片描述

在這里插入圖片描述

  • 訂單表新增一條記錄,庫存表-1,說明項目搭建成功

特殊情況

已知: order和stock是兩個庫
把order的controller代碼,改一下

package com.lcs.springcloud.controller;import com.lcs.springcloud.entity.OrderTbl;
import com.lcs.springcloud.feign.StockOpenFeign;
import com.lcs.springcloud.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredOrderService orderService;@AutowiredStockOpenFeign stockOpenFeign;@RequestMapping("/add")@Transactionalpublic String add(){OrderTbl orderTbl = new OrderTbl();orderTbl.setProduct_id("10");orderTbl.setTotal_amount(new BigDecimal(3000));orderTbl.setStatu(0);//1. 插入訂單orderService.insert(orderTbl);//2. 扣減庫存String reduct = stockOpenFeign.reduct(orderTbl.getProduct_id());// 3. 出現(xiàn)問題int a= 1/0;return "add order "+reduct;}
}

在這里插入圖片描述

  • 都知道0不能作為分母,必報錯, 大家說一下這個接口是多少?
    訂單插入進行了回滾,庫存表進行扣減庫存,為什么?
    這是因為@transaction事物是不支持跨庫回滾的。

分布式事務

代碼版本在上續(xù)上面做改動,請保證上面能先運行后, 再看該步驟

order-seata項目變動

pom.xml

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.2.5.RELEASE</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency>
  • 為什么加了一個cglib的包?
    在這里插入圖片描述
  • 報cg相關的一個錯,猜測估計是依賴沖突的問題,查了一下項目依賴,發(fā)現(xiàn)只有可能cglib的問題
    在這里插入圖片描述

application.yml

server:port: 8190spring:application:name: order-seatacloud:nacos:discovery:namespace: publicserver-addr: localhost:8848username: nacospassword: nacosalibaba:seata:tx-service-group: default_tx_groupdatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:db-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata_order?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useCursorFetch=trueusername: rootpassword: 123456
mybatis:mapper-locations: classpath:mapper/*.xmlseata:registry:#配置seata的注冊中心type: nacosnacos:### nacos服務器地址server-addr: localhost:8848username: nacospassword: nacos### nacos服務名application: seata-serverconfig:type: nacosnacos:### nacos服務器地址server-addr: localhost:8848username: nacospassword: nacosgroup: SEATA_GROUP

在這里插入圖片描述

  • 為什么叫這個名字,看自己seata-server的配置
    在這里插入圖片描述
    在這里插入圖片描述
  • 這里標紅的,就是我們需要填寫的名字,在網(wǎng)上可以查到很多叫guangzhou的,這是因為別人重命名咯

controller

在這里插入圖片描述

  • 注解改為@GlobalTransactional,表示是分布式事務

stock-seata項目變動

pom.xml

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.2.5.RELEASE</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency>

application.yml

server:port: 8200spring:application:name: stock-seatacloud:nacos:discovery:namespace: publicserver-addr: localhost:8848username: nacospassword: nacosalibaba:seata:tx-service-group: default_tx_groupdatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:db-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata_stock?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useCursorFetch=trueusername: rootpassword: 123456
mybatis:mapper-locations: classpath:mapper/*.xmlseata:registry:#配置seata的注冊中心type: nacosnacos:### nacos服務器地址server-addr: localhost:8848username: nacospassword: nacos### nacos服務名application: seata-serverconfig:type: nacosnacos:### nacos服務器地址server-addr: localhost:8848username: nacospassword: nacosgroup: SEATA_GROUP
  • 跟order項目類似,就是client跟seata以及nacos進行通信

腳本

CREATE 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=3 DEFAULT CHARSET=utf8;

在這里插入圖片描述

  • 涉及到分布式事務的庫,都需要新增該undo-log得表,他會記錄修改前,以及修改后的sql,以便逆向回滾
  • 例如你執(zhí)行了新增,逆向就是刪除

效果

在這里插入圖片描述

  • order表
    在這里插入圖片描述
  • 庫存表

在這里插入圖片描述
執(zhí)行http://localhost:8190/order/add,查看數(shù)據(jù)庫,出現(xiàn)異常后

  • 之前使用@transation是,訂單回滾,庫存減咯
  • 選擇使用@globaTransation注解,訂單回滾,庫存不變

分布式事務原理

nacos配置問題

在這里插入圖片描述
啟動后,在bin下面多了一個store開頭的文件夾,why?
我不是改成db模式嗎?為什么配置沒有生效,查了半天,才發(fā)現(xiàn)nacos的配置,竟然是默認的
在這里插入圖片描述

  • 搜索store.mode*改成db

啟動項目后,竟然報數(shù)據(jù)庫的一個錯誤,怎么可能,我數(shù)據(jù)庫的配置,都是copy的項目里面,不可能出問題,那原因只有一個,就是nacos里面的初始化配置又有問題
在這里插入圖片描述

  • 修改nacos這三個的配置,再啟動項目,seata得bin下面,沒有文件夾生成,說明切換成db模式成功

seata的幾個表都是什么情況

在這里插入圖片描述

  • seata的表

在這里插入圖片描述

  • 這是seata的一個流程圖
    在這里插入圖片描述
  • 輸入http://localhost:8190/order/add,在進入方法的時候打入斷點
    在這里插入圖片描述
    在這里插入圖片描述
  • global_table表生成了一個xid 拼接方式是ip+端口再加一個唯一id
  • xid 全局事務id
  • application_id 應用id
  • transaction_service_group 分組
  • transaction_name 事物加在那個方法上面(以前有個版本會標注在具體類具體方法),新版本后,變動了,好奇他底層是什么映射的,知道的,可以下方交流一下
    在這里插入圖片描述
  • 斷點執(zhí)行到這里
    在這里插入圖片描述
  • branch_table 表新增了一條數(shù)據(jù),這個是分支Xid
    在這里插入圖片描述
  • 訂單庫的undo-log,也新增了一條數(shù)據(jù)
    在這里插入圖片描述
  • lock_table表變化會存儲鎖表的信息
  • pk就是主鍵的id
#到order庫調(diào)用該sql,查看blob存放的內(nèi)容
select CONVERT(t.rollback_info USING utf8) from undo_log t
  • 如下圖
    在這里插入圖片描述
  • 因為是插入語句,所以beforeImage之前是沒有數(shù)據(jù)的,afterImage存放的就是修改后的數(shù)據(jù)

斷點走完后,所有的seata表數(shù)據(jù)都會回滾,如果遇到異常退出的情況,請先清空表數(shù)據(jù)

代碼下載

http://aloenet.com.cn/news/29122.html

相關文章:

  • 慈溪企業(yè)排名網(wǎng)站培訓機構排名全國十大教育機構排名
  • 做腳本網(wǎng)站建站公司最新報價
  • 網(wǎng)站海外推廣哪家好怎么在百度上發(fā)表文章
  • 怎樣做已有網(wǎng)站的編輯維護四川聚順成網(wǎng)絡科技有限公司
  • wordpress自建站哪里換logo騰訊企點客服
  • 印度做網(wǎng)站設計百度權重提升
  • 快速收錄網(wǎng)站微信公眾號運營
  • 云谷 網(wǎng)站建設網(wǎng)絡推廣的方法有
  • 精美化妝品網(wǎng)站模板推廣平臺排名前十名
  • 專業(yè)微網(wǎng)站建設公司首選公司哪家好網(wǎng)站排名軟件
  • 黨員寫試卷需要在哪個網(wǎng)站做輿情管理
  • 建網(wǎng)站學什么谷歌搜索引擎香港免費入口
  • 注冊網(wǎng)站到公安機關備案由誰告知seo關鍵詞排名優(yōu)化要多少錢
  • 百度seo優(yōu)化技巧東莞seo推廣公司
  • 網(wǎng)站子站建設aso關鍵詞優(yōu)化計劃
  • 動態(tài)網(wǎng)站開發(fā)案例教程百度網(wǎng)盤登陸入口
  • 搭建獨立站專業(yè)軟文代寫
  • 網(wǎng)站推廣每天必做的流程中視頻自媒體賬號注冊下載
  • 后海做網(wǎng)站公司網(wǎng)站推廣的渠道有
  • 在國外怎么做網(wǎng)站服務營銷
  • 做時時彩網(wǎng)站被抓廣州新塘網(wǎng)站seo優(yōu)化
  • 文創(chuàng)產(chǎn)品設計方案范本優(yōu)化關鍵詞排名推廣
  • 江蘇省政府門戶網(wǎng)站建設html+css網(wǎng)頁制作成品
  • 酒業(yè)公司網(wǎng)站模板鄭州百度推廣公司
  • wordpress點贊代碼北京seo網(wǎng)絡優(yōu)化師
  • 鹽城市住房城鄉(xiāng)建設委官方網(wǎng)站海陽seo排名優(yōu)化培訓
  • 手機網(wǎng)站建設設計手機百度app免費下載
  • 長沙建個網(wǎng)站一般需要多少錢網(wǎng)絡營銷策劃方案
  • 金華電子商務網(wǎng)站建設百度怎么做廣告推廣
  • 高端型網(wǎng)站制作永久免費google搜索引擎