日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理

發(fā)布時(shí)間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Seata簡(jiǎn)介

1、Seata組件

Seata是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù)。Seata將為用戶提供了AT、TCC、SAGA、XA事務(wù)模式,為用戶打造一站式的分布式解決方案。

2、支持模式

AT 模式

  • 基于支持本地 ACID 事務(wù)的關(guān)系型數(shù)據(jù)庫。
  • Java應(yīng)用,通過 JDBC 訪問數(shù)據(jù)庫。

一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。

二階段:提交異步化,非??焖俚赝瓿伞;貪L通過一階段的回滾日志進(jìn)行反向補(bǔ)償。

TCC模式

一個(gè)分布式的全局事務(wù),整體是兩階段提交的模型,全局事務(wù)是由若干分支事務(wù)組成的,分支事務(wù)要滿足兩階段提交的模型要求,即需要每個(gè)分支事務(wù)都具備自己的:

一階段 prepare 行為

二階段 commit 或 rollback 行為

Saga模式

Saga模式是SEATA提供的長(zhǎng)事務(wù)解決方案,在Saga模式中,業(yè)務(wù)流程中每個(gè)參與者都提交本地事務(wù),當(dāng)出現(xiàn)某一個(gè)參與者失敗則補(bǔ)償前面已經(jīng)成功的參與者,一階段正向服務(wù)和二階段補(bǔ)償服務(wù)都由業(yè)務(wù)開發(fā)實(shí)現(xiàn)。

XA模式

XA是一個(gè)分布式事務(wù)協(xié)議,對(duì)業(yè)務(wù)無侵入的分布式事務(wù)解決方案,XA提交協(xié)議需要事務(wù)參與者的數(shù)據(jù)庫支持,XA事務(wù)具有強(qiáng)一致性,在兩階段提交的整個(gè)過程中,一直會(huì)持有資源的鎖,性能不理想的缺點(diǎn)很明顯。

二、服務(wù)端部署

1、下載組件包

1.2版本:seata-server-1.2.0.zip

解壓目錄

  • bin:存放服務(wù)端運(yùn)行啟動(dòng)腳本;
  • lib:存放服務(wù)端依賴的資源jar包;
  • conf:配置文件目錄。

2、修改配置

file.conf配置

mode:db 即使用數(shù)據(jù)庫存儲(chǔ)事務(wù)信息,這里還可以選擇file存儲(chǔ)方式。

file模式為單機(jī)模式,全局事務(wù)會(huì)話信息內(nèi)存中讀寫并持久化本地文件root.data,性能較高;

db模式為高可用模式,全局事務(wù)會(huì)話信息通過db共享,相應(yīng)性能差些;

redis模式Seata-Server 1.3及以上版本支持,性能較高,存在事務(wù)信息丟失風(fēng)險(xiǎn),請(qǐng)?zhí)崆芭渲煤线m當(dāng)前場(chǎng)景的redis持久化配置.

store { ## store mode: file、db mode = "db" db { datasource = "druid" dbType = "mysql" driverClassName = "com.mysql.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata_server" user = "root" password = "123456" minConn = 5 maxConn = 30 globalTable = "global_table" branchTable = "branch_table" lockTable = "lock_table" queryLimit = 100 maxWait = 5000 }}

registry.conf配置

這里選擇eureka作為注冊(cè)中心,seata-server也要作為一個(gè)服務(wù)添加到注冊(cè)中心,不使用配置中心所以config配置默認(rèn)即可。

registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "eureka" eureka { serviceUrl = "http://localhost:8761/eureka" application = "default" weight = "1" }}

3、事務(wù)管理表

需要在seata-server即上述配置的MySQL庫中建立3張事務(wù)管理表:

  • 全局事務(wù):global_table
  • 分支事務(wù):branch_table
  • 全局鎖:lock_table
  • 事務(wù)回滾:undo_log
  • SQL腳本:mysql-script目錄

4、啟動(dòng)命令

Linux環(huán)境:sh seata-server.sh

三、業(yè)務(wù)服務(wù)搭建

1、代碼結(jié)構(gòu)

  • seata-eureka:注冊(cè)中心
  • seata-order:訂單服務(wù)
  • seata-account:賬戶服務(wù)
  • seata-inventor:庫存服務(wù)
  • seata-client:客戶端服務(wù)
  • account-feign:賬戶Feign接口
  • inventory-feign:庫存Feign接口
  • order-feign:訂單Feign接口

請(qǐng)求鏈路:客戶端->訂單->賬戶+庫存,測(cè)試整個(gè)流程的分布式事務(wù)問題。

2、數(shù)據(jù)庫結(jié)構(gòu)

  • seata_server:seata組件服務(wù)端依賴庫
  • seata_account:模擬賬戶數(shù)據(jù)庫
  • seata_inventor:模擬庫存數(shù)據(jù)庫
  • seata_order:模擬訂單數(shù)據(jù)庫

各個(gè)庫腳本位置:mysql-script/data-biz.sql

3、啟動(dòng)服務(wù)

依次啟動(dòng):注冊(cè)中心,庫存服務(wù),賬戶服務(wù),訂單服務(wù),客戶端服務(wù);

Eureka服務(wù)列表如下:

四、Seata用法詳解

1、Seata基礎(chǔ)配置

幾個(gè)基礎(chǔ)服務(wù)的配置方式一樣。

conf配置

file.conf重點(diǎn)關(guān)注下面內(nèi)容,事務(wù)組的名稱,需要在yml文件中使用。

my_test_tx_group = "default"

registry.conf:是注冊(cè)中心的選擇。

2、數(shù)據(jù)庫配置

注意這里的事務(wù)組名稱配置。

spring: # 事務(wù)組的名稱 cloud: alibaba: seata: tx-service-group: my_test_tx_group # 數(shù)據(jù)源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource druid: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/seata_account username: root password: 123456

將數(shù)據(jù)庫整體由Seata進(jìn)行代理管理,核心API:DataSourceProxy。

@Configurationpublic class SeataAccountConfig { @Value("${spring.application.name}") private String applicationName; @Bean public GlobalTransactionScanner globalTransactionScanner() { return new GlobalTransactionScanner(applicationName, "test-tx-group"); } @Bean @ConfigurationProperties(prefix = "spring.datasource.druid") public DruidDataSource druidDataSource() { return new DruidDataSource() ; } @Primary @Bean("dataSource") public DataSourceProxy dataSourceProxy(DataSource druidDataSource) { return new DataSourceProxy(druidDataSource); } @Bean public SqlSessionFactory sqlSessionFactory(DataSourceProxy dataSourceProxy)throws Exception{ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSourceProxy); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath*:/mapper/*.xml")); sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); return sqlSessionFactoryBean.getObject(); }}

3、業(yè)務(wù)代碼

核心注解:GlobalTransactional,管理整體的分布式事務(wù)。

@Servicepublic class OrderServiceImpl implements OrderService { private final Logger LOGGER = LoggerFactory.getLogger(OrderServiceImpl.class); @Resource private OrderMapper orderMapper ; @Resource private AccountFeign accountFeign ; @Resource private InventoryFeign inventoryFeign ; @GlobalTransactional @Override public Integer createOrder(String orderNo) { LOGGER.info("Order 生成中 "+orderNo); // 本服務(wù)下訂單庫 Integer insertFlag = orderMapper.insert(orderNo) ; // 基于feign接口處理賬戶和庫存 accountFeign.updateAccount(10L) ; inventoryFeign.updateInventory(10) ; return insertFlag ; }}

測(cè)試流程:在任意服務(wù)下拋出異常,觀察整體的事務(wù)狀態(tài),觀察是否有整體的事務(wù)控制效果。


創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品不卡在线 | 外国黄色录像 | 琪琪秋霞午夜被窝电影网 | 成人在线观看视频网站 | 亚洲一区二区久久久 | 中文av资源| 成人免费一区二区三区在线观看 | 精品国产一区二区视频 | av高清不卡 | 亚洲AV无码成人精品国产一区 | 成人无码av片在线观看 | 成人a网| 成人av动漫在线观看 | 久久黄色网| 中文字幕日韩精品一区 | 欧美交受高潮1 | 欧美精品一区二区视频 | 狼人伊人av | 国产三级日本三级在线播放 | 国产精品情侣呻吟对白视频 | 久久久国产精品视频 | 久久成人精品视频 | 超碰97av| 影音先锋蜜桃 | 毛片9| 色五五月| 美女啪啪网址 | 一级黄毛片 | 日韩亚洲精品中文字幕 | 中文字幕欧美一区 | 精品视频第一页 | 精品久久人人妻人人做人人 | 国内精久久久久久久久久人 | 熟女俱乐部五十路六十路av | 日韩精品中文字幕在线播放 | 美女精品网站 | 大咪咪av| 熟妇五十路六十路息与子 | 丝袜福利视频 | 色秀视频网| fee性满足he牲bbw| 欧美福利网 | 一区精品在线观看 | 中文字幕在线2018 | 亚洲第一视频在线播放 | 日日干天天爽 | 精品久久久蜜桃 | 国产在线激情视频 | 欧美精品乱人伦久久久久久 | 欧美12--15处交性娇小 | 啪啪国产精品 | 黑人精品一区二区三区 | 久久久精品毛片 | 在线综合av | 国产性av | 久久久久国产精品熟女影院 | 成人精品三级av在线看 | 911av| 黄色a视频| 国产777| 免费在线观看黄网站 | 三级视频久久 | 久久这里都是精品 | 97涩涩网 | 亚洲精品入口 | 日韩福利视频导航 | 一级的大片 | 亚洲天天操 | 人妖ts福利视频一二三区 | 五月天一区二区 | 亚洲素人 | 欧州一区二区 | 久久8| 久久亚洲欧洲 | 久久久久久久久久一区 | 91综合久久 | 午夜久久视频 | 欧美大片免费观看 | wwwxxxx在线观看 | 男女爱爱福利视频 | 亚洲美女激情视频 | 欧美激情一二三区 | 成年人在线观看视频免费 | 国产第一页在线 | 欧美激情免费在线 | 亚洲天堂男 | 国产不卡a | 16—17女人毛片 | 尤物精品在线观看 | 蜜臀av一区二区 | 国产又粗又猛又爽69xx | 色老头免费视频 | 国产精品久久久久久久午夜 | 精品xxx| 女生喷液视频 | 悟空影视大全免费高清观看在线 | 国产农村妇女精品一区二区 | 操天天操 | 国产精品九九热 |