RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)
生活随笔
收集整理的這篇文章主要介紹了
RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求背景:
模擬下單場景:首先去在自己的本地創建一條下單記錄,同時,還要去調用庫存服務,執行減庫存操作。
這里演示一個客戶下訂單的流程服務來為小伙伴們進一步了解一下分布式事務到底如何使用?
首先,我會把系統模塊中,開發訂單需求;然后,再創建一個庫存的子模塊,最后,客戶端發起訂單請求,系統模塊接收到請求后,在本地數據庫中創建一個。
文章目錄
- 一、數據庫部分
- 1. 訂單表創建
- 2. 庫存數據庫創建
- 3. 庫存表結構初始化
- 4. 添加依賴
- 二、訂單微服務代碼部分
- 2.1. 創建實體類
- 2.2. 創建接口類
- 2.3. 調整控制層邏輯
- 2.4. 修改配置文件
- 三、庫存微服務代碼部分
- 3.1. 創建實體類
- 3.2. 接口庫存Dao
- 3.3. 容錯代碼
- 3.4. 控制層邏輯調整
- 3.5. 配置文件修改
- 3.6. 初始化庫存
- 3.7. 容錯代碼簡述
- 四、測試驗證
- 4.1. 啟動服務
- 4.2. 發起第一輪請求
- 4.3. 拋出異常
- 4.4. 異常信息監控
- 4.5. 流程梳理
- 4.6. 數據庫驗證
- 4.7. 發起第二輪請求
- 4.8. 發起第三輪請求
- 4.9. 數據庫數據驗證
- 4.10. 發起第四輪請求
- 4.11. 數據庫驗證
一、數據庫部分
1. 訂單表創建
在系統模塊連接的,ry-cloud數據庫中創建一張訂單表 和 AT模式seata需要用到的undolog表,其中undo_log表,在前面已經創建過了
create table order_tb (id int auto_incrementprimary key,user_id int not null,product_id int not null );CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(100) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AT transaction mode undo table';2. 庫存數據庫創建
創建ry-stock數據庫
3. 庫存表結構初始化
```bash create table stock (id int auto_incrementprimary key,count int not null,product_id int not null );CREATE TABLE `undo_log` (`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',`xid` varchar(100) NOT NULL COMMENT 'global transaction id',`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',`rollback_info` longblob NOT NULL COMMENT 'rollback info',`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',`log_created` datetime(6) NOT NULL COMMENT 'create datetime',`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AT transaction mode undo table';4. 添加依賴
系統模塊
<!--Lombok引入--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>二、訂單微服務代碼部分
我們對現在的order-serv訂單服務基礎上調整
2.1. 創建實體類
2.2. 創建接口類
2.3. 調整控制層邏輯
2.4. 修改配置文件
三、庫存微服務代碼部分
3.1. 創建實體類
3.2. 接口庫存Dao
3.3. 容錯代碼
3.4. 控制層邏輯調整
3.5. 配置文件修改
3.6. 初始化庫存
3.7. 容錯代碼簡述
四、測試驗證
4.1. 啟動服務
4.2. 發起第一輪請求
4.3. 拋出異常
4.4. 異常信息監控
4.5. 流程梳理
4.6. 數據庫驗證
4.7. 發起第二輪請求
4.8. 發起第三輪請求
4.9. 數據庫數據驗證
4.10. 發起第四輪請求
4.11. 數據庫驗證
改之前配置
# spring配置 spring: redis:host: localhostport: 6379password: 123456datasource:druid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456dynamic:druid:initial-size: 5min-idle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20filters: stat,slf4jconnectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000datasource:# 主庫數據源master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 從庫數據源# slave:# username: # password: # url: # driver-class-name: # seata: true # 開啟seata代理,開啟后默認每個數據源都代理,如果某個不需要代理可單獨關閉# seata配置 seata:# 默認關閉,如需啟用spring.datasource.dynami.seata需要同時開啟enabled: false# Seata 應用編號,默認為 ${spring.application.name}application-id: ${spring.application.name}# Seata 事務組編號,用于 TC 集群名tx-service-group: ${spring.application.name}-group# 關閉自動代理enable-auto-data-source-proxy: false# 服務配置項service:# 虛擬組和分組的映射vgroup-mapping:ruoyi-system-group: defaultconfig:type: nacosnacos:serverAddr: 127.0.0.1:8848group: SEATA_GROUPnamespace:registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848namespace:# mybatis配置 mybatis:# 搜索指定包別名typeAliasesPackage: com.ruoyi.system# 配置mapper的掃描,找到所有的mapper.xml映射文件mapperLocations: classpath:mapper/**/*.xml# swagger配置 swagger:title: 系統模塊接口文檔license: Powered By ruoyilicenseUrl: https://ruoyi.vip調整之后配置
# spring配置 spring: redis:host: localhostport: 6379password: 123456datasource:druid:stat-view-servlet:enabled: trueloginUsername: adminloginPassword: 123456dynamic:druid:initial-size: 5min-idle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20filters: stat,slf4jconnectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000datasource:# 主庫數據源master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 從庫數據源# slave:# username: # password: # url: # driver-class-name: seata: true # 開啟seata代理,開啟后默認每個數據源都代理,如果某個不需要代理可單獨關閉# seata配置 seata:# 默認關閉,如需啟用spring.datasource.dynami.seata需要同時開啟enabled: true# Seata 應用編號,默認為 ${spring.application.name}application-id: ${spring.application.name}# Seata 事務組編號,用于 TC 集群名tx-service-group: order-service# 關閉自動代理enable-auto-data-source-proxy: false# 服務配置項service:# 虛擬組和分組的映射vgroup-mapping:ruoyi-system-group: defaultconfig:type: nacosnacos:serverAddr: 127.0.0.1:8848group: SEATA_GROUPnamespace: publicuserName: "nacos"password: "nacos"registry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace: publicuserName: "nacos"password: "nacos"# mybatis配置 mybatis:# 搜索指定包別名typeAliasesPackage: com.ruoyi.system# 配置mapper的掃描,找到所有的mapper.xml映射文件mapperLocations: classpath:mapper/**/*.xml# swagger配置 swagger:title: 系統模塊接口文檔license: Powered By ruoyilicenseUrl: https://ruoyi.vip總結
以上是生活随笔為你收集整理的RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端H5 腾讯地图sdk 当前位置 地
- 下一篇: 分布式解决方案之分布式日志采集elk+k