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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

springboot整合seata1.5.2+nacos2.1.1

發布時間:2023/10/11 综合教程 170 老码农
生活随笔 收集整理的這篇文章主要介紹了 springboot整合seata1.5.2+nacos2.1.1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

  Seata出現前,大部分公司使用的都是TCC或者MQ(RocketMq)等來解決分布式事務的問題,TCC代碼編寫復雜,每個業務均需要實現三個入口,侵入性強,RocketMQ保證的是最終一致性。

二、環境準備

1、nacos:(這里采用最新版本2.1.1)

  下載地址:https://github.com/alibaba/nacos/releases

  官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html

2、seata:(這里采用最新版本1.5.2)

  下載地址:https://github.com/seata/seata/releases

  官方文檔:http://seata.io/zh-cn/docs/overview/what-is-seata.html

3、其它

  redis、maven、mysql等(自行安裝)

三、項目搭建(這里僅作本地測試,均采用單機模式)

1、mysql 自行下載、安裝,創建數據庫seata、nacos、seata-user、seata-order(后面兩個是接入seata的微服務的數據庫)

2、nacos

  ①解壓壓縮包,進入nacos目錄

  ②進入conf目錄,拷貝nacos-mysql.sql到數據庫nacos初始化

  ③打開application.properties,找到如下配置,放開注釋,修改為本地連接

### If use MySQL as datasource:
spring.datasource.platform=mysql ### Count of DB:
db.num=1 ### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos

  ④進入bin目錄,執行cmd命令," .\startup.cmd -m standalone",觀察到如下日志,無報錯,即啟動成功

  ⑤上圖標出的即為nacos管理界面的地址,賬號密碼均為nacos,登錄成功

  ⑥新建命令空間,我這里加的"yhc",大家可以自定義,不過后面seata和server的配置需要對應上,后文也會提到。

  ⑦新建配置"seata.yml",這個配置可以從seata官網demo中找到,注意只用修改db連接即可。

metrics:
enabled: false
exporterList: prometheus
exporterPrometheusPort: 9898
registryType: compact
server:
maxCommitRetryTimeout: -1
maxRollbackRetryTimeout: -1
recovery:
asynCommittingRetryPeriod: 1000
committingRetryPeriod: 1000
rollbackingRetryPeriod: 1000
timeoutRetryPeriod: 1000
rollbackRetryTimeoutUnlockEnable: false
undo:
logDeletePeriod: 86400000
logSaveDays: 7
store:
db:
branchTable: branch_table
datasource: druid
dbType: mysql
driverClassName: com.mysql.cj.jdbc.Driver
globalTable: global_table
lockTable: lock_table
maxConn: 30
maxWait: 5000
minConn: 5
password: root
queryLimit: 100
url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&useSSL=false
user: root
mode: db
transport:
compressor: none
serialization: seata

3、seata

  ①解壓壓縮包,進入seata目錄

  ②進入/script/server/db目錄,拷貝mysql.sql到數據庫seata初始化

  ③進入/conf目錄,修改application.yml配置文件,配置中心和注冊中心改為nacos

seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: localhost:8848
namespace: c23f9030-953e-46bb-8c6e-0bf4a8227a8c
group: yhc
username: nacos
password: nacos
data-id: seata.yml
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: localhost:8848
namespace: c23f9030-953e-46bb-8c6e-0bf4a8227a8c
group: yhc
username: nacos
password: nacos

  ④進入/bin目錄,雙擊執行seata-server.bat啟動

  ⑤打開nacos列表,觀察seata服務注冊成功

4、服務接入

  ①引入依賴

        <dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.5.2</version>
</dependency>

  ②添加seata配置(注意替換nacos配置)

seata:
enabled: true
# Seata 應用編號,默認為 ${spring.application.name}
application-id: ${spring.application.name}
# Seata 事務組編號,用于 TC 集群名
tx-service-group: ${spring.application.name}-group
# 關閉自動代理
enable-auto-data-source-proxy: true
# 服務配置項
service:
# 虛擬組和分組的映射
vgroup-mapping:
seata-user-group: default # config:
# # support: nacos, consul, apollo, zk, etcd3
# type: nacos
# nacos:
# server-addr: localhost:8848
# namespace: c23f9030-953e-46bb-8c6e-0bf4a8227a8c
# group: yhc
# username: nacos
# password: nacos
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace: 1238c7de-5821-452d-8586-639ccca55768
group: yhc
# username: nacos
# password: nacos
# cluster: default

  ③在需要事務管理的地方添加seata注解@GlobalTransactional

  ④在seata-user數據庫初始化undo_log表

  ⑤另一個微服務seata-order也按如上操作配置,源碼地址:https://gitee.com/yhc910/seata-demo.git

  ⑥啟動redis服務、seata-user服務、seata-order服務

四、測試

UserServiceImpl類里,修改如下判斷值,驗證事務回滾。

1、數據正常提交

結果:賬戶余額減少,交易記錄正常保存

 2、修改判斷值為true,拋出異常

結果:賬戶不動,無交易記錄,說明事務已回滾

 3、修改判斷值為false,重復操作1

結果:發現id有間隔(注意:我們的業務表的主鍵id是自增),是因為seata是先將數據插入后,事務回滾做的刪除,所以該刪除數據的id無記錄。

此次接入有比較多的注意點,這里我列下:

1、nacos單機啟動命令,需添加 -m standalone 指定模式

2、接入seata的配置,tx-service-group的值與vgroup-mapping需保持一致

3、A服務調用B服務,B服務獲取xid為null,是因為xid沒被透傳,需自定義Feign的RequestInterceptor處理。

String xid = RootContext.getXID();
template.header(RootContext.KEY_XID, xid);

下篇會整合shardingpshere,有興趣的可以先看看這篇文章:https://www.cnblogs.com/yhc-910/p/16543293.html

總結

以上是生活随笔為你收集整理的springboot整合seata1.5.2+nacos2.1.1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。