成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個注解搞定分布式事務

數據庫 其他數據庫
XA 規范描述了全局的事務管理器與局部的資源管理器之間的接口。XA規范的目的是允許多個資源(如數據庫,應用服務器,消息隊列等)在同一事務中訪問,這樣可以使 ACID 屬性跨越應用程序而保持有效。

Sharding-JDBC目前還整合其他分布式事務模式來解決事務問題,今天就來介紹一下兩階段事務XA是如何解決分布式事務

什么是XA規范

XA 規范 是 X/Open 組織定義的分布式事務處理(DTP,Distributed Transaction Processing)標準。

XA 規范描述了全局的事務管理器與局部的資源管理器之間的接口。XA規范的目的是允許多個資源(如數據庫,應用服務器,消息隊列等)在同一事務中訪問,這樣可以使 ACID 屬性跨越應用程序而保持有效。

XA 規范使用兩階段提交來保證所有資源同時提交或回滾任何特定的事務。

XA 事務的基礎是兩階段提交協議。需要有一個事務協調者來保證所有的事務參與者都完成了準備工作(第一階段)。如果協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交了(第二階段)。

MySQL 在這個 XA 事務中扮演的是參與者的角色,而不是協調者(事務管理器)。

MySQL中的XA事務分為外部XA和內部XA:

  • 外部XA:可以參與外部的分布式事務,需要協調者參與協調
  • 內部XA:用于同一實例下跨多引擎事務,由 Binlog 作為協調者,比如在一個存儲引擎提交時,需要將提交信息寫入二進制日志,這就是一個分布式內部 XA 事務,只不過二進制日志的參與者是 MySQL 本身。

基于XA規范分布式事務對業務是無侵入的,用戶可以像使用本地事務一樣使用基于XA規范的分布式事務。

但是基于XA規范的分布式事務屬于強一致性事務,性能比較低,尤其在長事務的情況下,對資源的鎖定時間較長,一般適用于短事務、低并發的場景。

MySQL中XA事務

接下來就以為MySQL中XA來演示一下,如下;

圖片

上述命令什么意思呢?解析如下:

  • XA START "test_xid"?:開啟一個XA事務,test_xid是全局事務xid,名稱任意
  • update product_base set price=1000 where product_id=743948772064624640:執行的SQL語句
  • XA END "test_xid"?:這個表示結束一個 XA 事務,此時事務的狀態轉為IDLE。
  • XA PREPARE "test_xid":這個將事務置為 PREPARE 狀態
  • XA COMMIT "test_xid":這個用來提交事務,提交之后,事務的狀態就是 COMMITED。
  • XA ROLLBACK "test_xid":這個用來回滾事務

Sharding-JDBC中的XA事務

Sharding-JDBC目前已經整合了XA事務的支持,支持的Atomikos、NARAYANA 、BITRONIX 事務的實現,默認的實現是Atomikos。下面將以Atomikos為例子介紹一下Sharding-JDBC如何實現XA事務

SharingSphere是通過SPI的方式去定制分布式事務解決方案的,XA的默認實現是org.apache.shardingsphere.transaction.xa.XAShardingTransactionManager,有興趣的可以看下其中源碼

后文介紹到的弱一致性事務使用Seata的AT模式,對應的是org.apache.shardingsphere.transaction.base.seata.at.SeataATShardingTransactionManager

當然Seata也是支持XA事務,如果后續改寫的話,可以通過SPI的方式的定制

1. 添加依賴

使用XA事務需要添加一個依賴,如下:

<!-- 使用XA事務時,需要引入此模塊 -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-transaction-xa-core</artifactId>
</dependency>

可以看到這個依賴中內置了ATOMIKOS,如下:

圖片

2. 配置事務管理器

使用事務之前當然需要配置一個事務管理器,這里和Spring Boot 中配置沒差別,如下:

@Configuration
@EnableTransactionManagement
public class TransactionConfiguration {
@Bean
public PlatformTransactionManager txManager(final DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}

3. @ShardingTransactionType注解

想要開啟XA分布式事務還需要使用一個注解@ShardingTransactionType,其中的value屬性的值如下:

  • TransactionType.LOCAL:開啟本地事務的支持,默認值
  • TransactionType.XA:開啟XA事務的支持
  • TransactionType.BASE:開啟弱事務的支持

那么顯然這里只需要配置TransactionType.XA就能開啟XA事務的支持

偽代碼如下:

@ShardingTransactionType(value = TransactionType.XA)
@Transactional
public void method(){
//跨庫操作
..............
}

4. 啟動測試

演示的源碼請看視頻教程中的源碼,需要注意的是Atomikos會在項目的logs目錄下生成xa_tx.log文件,其中記錄了事務日志,在XA崩潰恢復時所需要的日志,一定不要刪除

圖片

對于Atomikos的一些配置可以通過在項目的classpath中添加jta.properties來定制化Atomikos配置項,這里就不再給大家詳細介紹了。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2019-12-27 16:00:56

分布式事務框架Java

2021-09-07 09:26:13

Python 開發編程語言

2022-06-27 08:21:05

Seata分布式事務微服務

2022-06-21 08:27:22

Seata分布式事務

2017-07-26 15:08:05

大數據分布式事務

2022-09-29 08:28:57

SpringRedis分布式

2022-09-22 13:28:34

Redis分布式鎖

2020-07-30 09:35:09

Redis分布式鎖數據庫

2019-10-10 09:16:34

Zookeeper架構分布式

2022-05-26 10:42:30

數據權限注解

2021-09-14 13:55:15

Go開發分布式

2021-10-11 09:24:14

分布式架構系統

2021-10-25 10:33:29

Python 開發編程語言

2009-06-19 15:28:31

JDBC分布式事務

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2021-09-29 09:07:37

分布式架構系統

2021-03-18 09:18:39

分布式事務Saga

2024-02-19 00:00:00

Redis分布式

2023-09-04 08:45:07

分布式配置中心Zookeeper

2023-06-27 13:47:00

分布式事務本地事務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产99国产精品 | 精品欧美一区二区久久久伦 | 日韩亚洲视频 | 亚洲国产成人精品女人 | 国产91网站在线观看 | a黄在线观看 | 久产久精国产品 | 国产精品入口久久 | 久久久高清 | 日日天天| 欧美videosex性极品hd | 久久精品一区 | 国产精品一区二区欧美黑人喷潮水 | 在线免费观看a级片 | 婷婷五月色综合香五月 | 欧美久操网 | 欧美久久一区二区 | 一区二区三区不卡视频 | 国产免费观看一级国产 | 美日韩免费视频 | 97国产精品视频人人做人人爱 | 中文字幕在线观看一区 | 久久久精品欧美 | 久久中文字幕一区 | 91精品国产一区二区三区蜜臀 | 久久久久久久国产 | 成人午夜免费福利视频 | 国产精品99久久免费观看 | 国产福利一区二区 | 午夜免费视频 | 国产原创在线观看 | 亚洲日本欧美日韩高观看 | 爱草在线 | 91人人爽 | 在线观看中文字幕亚洲 | 国产一区二区三区视频在线观看 | 欧美在线观看一区二区 | 天天干狠狠操 | 九九热在线视频 | 一区二区三区国产精品 | h片在线观看免费 |