Seata如何與Spring Cloud整合?

🔧 一、整合核心步驟

1. 啟動 Seata Server(TC)
  • 環境準備
    • 修改 registry.conf,指定注冊中心(如 Nacos)和配置中心:
      registry {type = "nacos"nacos {serverAddr = "localhost:8848"namespace = "public"}
      }
      config {type = "nacos"nacos { serverAddr = "localhost:8848" }
      }
      
    • 同步配置到 Nacos:
      sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP
      
    • 啟動 Seata Server:
      bin/seata-server.sh -p 8091
      
  • 高可用:集群部署時需確保所有節點使用相同的注冊中心和事務分組。
2. 客戶端(微服務)配置
  • 依賴引入(Spring Cloud Alibaba):
    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></exclusion></exclusions>
    </dependency>
    <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.2</version>
    </dependency>
    
  • 事務分組配置application.yml):
    seata:tx-service-group: my_tx_group  # 事務分組名,需與Seata Server配置一致service:vgroup-mapping:my_tx_group: default       # 映射到Seata Server集群名registry:type: nacosnacos:server-addr: localhost:8848
    

    📌 注tx-service-group 需在所有參與事務的微服務中保持一致。

3. 業務庫準備
  • 創建 undo_log(AT 模式必需):
    CREATE TABLE `undo_log` (`branch_id` BIGINT NOT NULL,`xid` VARCHAR(100) NOT NULL,`rollback_info` LONGBLOB NOT NULL,UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
    ) ENGINE=InnoDB;
    
    此表用于記錄事務回滾日志。
4. 數據源代理
  • 自動代理(推薦):
    seata:enable-auto-data-source-proxy: truedata-source-proxy-mode: AT   # 可選 AT/XA 模式
    
  • 手動代理(需自定義數據源):
    @Bean
    public DataSource dataSourceProxy(DataSource druidDataSource) {return new DataSourceProxy(druidDataSource); // 包裝原生數據源
    }
    
    確保所有數據庫操作通過 DataSourceProxy 執行。
5. 事務注解使用
  • 事務發起方的方法上添加 @GlobalTransactional
    @RestController
    public class OrderController {@GlobalTransactional(rollbackFor = Exception.class)@PostMapping("/create")public String createOrder() {orderService.create();inventoryService.deductStock(); // 通過Feign調用其他服務if (error) throw new RuntimeException("回滾");}
    }
    
  • XID 傳遞:通過 Feign/RestTemplate 調用時,Seata 自動傳遞全局事務 ID(XID)。

?? 二、事務模式配置

1. AT 模式(默認)
  • 依賴 undo_log 表實現自動回滾。
  • 要求業務表有單列主鍵,不支持多列主鍵(MySQL除外)。
2. TCC 模式
  • 需自定義 TCC 接口:
    @LocalTCC
    public interface TccAction {@TwoPhaseBusinessAction(name = "prepare", commitMethod = "commit", rollbackMethod = "rollback")boolean prepare(BusinessActionContext ctx, @BusinessActionContextParameter(paramName = "param") String param);boolean commit(BusinessActionContext ctx);boolean rollback(BusinessActionContext ctx);
    }
    
  • 通過 @GlobalTransactional 調用 TCC 方法。
3. XA 模式
  • 開啟 MySQL XA 支持:
    [mysqld]
    innodb_support_xa=1
    
  • 修改配置:
    seata:data-source-proxy-mode: XA
    
    適用于強一致性場景。

?? 三、關鍵注意事項

  1. 版本兼容性

    組件推薦版本
    Spring Cloud Alibaba2.1.1.RELEASE (Seata 1.4)
    Seata Client1.4.0+
    Nacos Server1.2.1+
    避免使用 spring-cloud-alibaba-seata:2.1.2+ 與 Seata 1.4.0 組合(存在兼容問題)。
  2. 配置一致性

    • Seata Server 與客戶端的 registry.conf 和事務分組配置必須一致
    • 若使用 Nacos 配置中心,需通過 nacos-config.sh 同步配置。
  3. 常見問題

    • 連接失敗:檢查事務分組映射(vgroup-mapping)和 Seata Server 注冊狀態。
    • 數據源沖突:排除 Druid 自動配置(如 druid-spring-boot-starter)或降級 Druid 版本。
    • 跨服務調用:確保 Feign/RestTemplate 的攔截器已啟用(Spring Cloud Alibaba 默認集成)。

💎 四、最佳實踐

  • 事務粒度@GlobalTransactional 應加在業務入口層(如 Controller 或 Facade 服務)。
  • 冷熱分離:高頻事務服務使用獨立數據源,避免 undo_log 表成為性能瓶頸。
  • 熔斷降級:結合 Sentinel 防止事務阻塞導致雪崩。

通過以上步驟,Seata 可無縫集成到 Spring Cloud 微服務中,解決跨服務事務一致性問題。完整示例參考:Seata + Spring Cloud 實戰代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83713.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python惰性函數與技術總結-由Deepseek產生

在Python中&#xff0c;惰性&#xff08;Lazy&#xff09;技術指延遲計算直到真正需要結果時才執行&#xff0c;常用于優化內存和性能。以下是常見的惰性函數和技術&#xff1a; 1. 生成器&#xff08;Generators&#xff09; 原理&#xff1a;使用 yield 返回迭代結果&#x…

輪廓 裂縫修復 輪廓修復 填補孔洞 源代碼

目錄 1. 形態學閉合操作填補小孔洞 完整代碼: 使用 Douglas-Peucker 算法對輪廓進行多邊形逼近 2.裂縫修復 輪廓修復 輪廓補全 函數封裝 調用示例: 1. 形態學閉合操作填補小孔洞 完整代碼: import cv2 import numpy as np# 創建模擬圖像(白色區域 + 多個不規則黑洞)…

HTTP1.1

HTTP基礎知識 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于傳輸超文本 的應用層協議&#xff0c;采用客戶端-服務器 模型。 客戶端&#xff08;如瀏覽器&#xff09;發起請求&#xff0c;服務器響應并返回數據。 工作原理 客戶端發送HTTP請求至服…

【Linux教程】Linux 生存指南:掌握常用命令,避開致命誤操作

Linux 常用操作命令&#xff1a;避免誤操作指南 在 Linux 系統中&#xff0c;熟練掌握常用操作命令是高效工作的基礎&#xff0c;但同時也要警惕誤操作帶來的風險。無論是部署程序、配置防火墻、管理端口還是處理進程&#xff0c;一個小小的失誤都可能導致系統故障、數據丟失等…

PHP:Web 開發領域的常青樹

在當今數字化浪潮中&#xff0c;Web 開發技術日新月異&#xff0c;各種新興語言和框架層出不窮。然而&#xff0c;PHP 作為一門經典的后端開發語言&#xff0c;依然在 Web 開發領域占據著重要地位&#xff0c;展現出強大的生命力和廣泛的應用價值。 PHP 的歷史與現狀 PHP&…

平均數與倍數

目錄 一. 平均數現期平均數基期平均數&#xff08;比較冷門&#xff09;兩期平均數-比較平均數的增長量平均數的增長率 二. 倍數基期倍數 \quad 一. 平均數 \quad 現期平均數 \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad 平均數速算技巧&#xff1a;削峰填谷…

一個完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (三)

現在我們主要完成AI-RAG服務的擴展&#xff0c;利用ES的向量檢索能力完成歷史聊天記錄的存儲和向量檢索&#xff0c;讓ai聊天有記憶。 主要做法是在首次聊天完成后將對話內容寫出日志到D:\dev\dev2025\EC0601\logs\chat-his.log 寫出日志同時嵌入向量 向量可以從ollama的端點&…

Vue嵌套(多級)路由

一、前言 在構建中大型單頁應用(SPA)時,頁面結構往往比較復雜,比如儀表盤、用戶中心、商品管理等模塊通常包含多個子功能頁面。為了更好地組織這些頁面,Vue Router 提供了嵌套(多級)路由的功能。 通過嵌套路由,我們可以在父級組件中嵌入一個 <router-view> 來展…

Kubernetes 集群安全(身份認證機制、SecurityContext、Network Policy網絡策略、預防配置泄露、全面加固集群安全)

Kubernetes 集群安全(身份認證機制、SecurityContext、Network Policy網絡策略、預防配置泄露、全面加固集群安全) 一、Kubernetes 身份認證機制 身份認證(Authentication): 在 K8S 中,身份認證是安全訪問控制的第一道大門,它的目標是: 確認請求發起者的真實身份 K8…

【VUE3】基于Vue3和Element Plus的遞歸組件實現多級導航欄

文章目錄 前言一、遞歸的意義二、遞歸組件的實現——基于element-plus UI的多級導航欄2.1 element-plus Menu菜單官方示例2.2 接口定義2.3 組件遞歸2.4 父組件封裝遞歸組件 三、完整代碼——基于element-plus UI的多級導航欄3.1 組件架構3.2 types.ts3.3 menuTreeItem.vue3.4 i…

思科資料-ACL的基礎配置-詳細總結

一、ACL技術 1、定義 訪問控制列表訪問控制列表使用包過濾技術&#xff0c;在路由器上讀取第三層及第四層包頭中的信息如源地址&#xff0c;目的地址&#xff0c;源端口&#xff0c;目的端口等&#xff0c;根據預先定 義好的規則對包進行過濾&#xff0c;從而達到訪問控制的目…

GitHub 上 PAT 和 SSH 的 7 個主要區別:您應該選擇哪一個?

在代碼倉庫和像 Github 這樣的版本控制系統中,有時您需要安全高效地訪問您的倉庫。隨著對更安全實踐的需求日益增長,開發人員一直在尋找最高效、最安全的方式來與 Github 交互。為了解決這個問題,我們將探討兩種常用的方法:個人訪問令牌 (PAT) 和安全 Shell (SSH) 密鑰。本…

Vue 事件修飾符詳解

Vue 事件修飾符詳解 事件修飾符是 Vue 中處理 DOM 事件細節的強大工具。下面我將通過一個交互式示例全面解析各種事件修飾符的用法和原理。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"…

初探Qt信號與槽機制

3.3 按鍵響應 - 初識信號與槽 3.3.1 信號與槽基本介紹 提出疑問&#xff0c;界面上已經有按鍵了&#xff0c;怎么操作才能讓用戶按下按鍵后有操作上的反應呢&#xff1f; 在 Qt 中&#xff0c; 信號和槽機制 是一種非常強大的事件通信機制。這是一個重要的概念&#xff0…

Android音視頻流媒體基礎總結

流媒體開發中&#xff0c;流媒體系統的實現從數據采集、編碼封裝、傳輸分發、接收解碼播放都有哪些技術和實現&#xff0c;流媒體和本地音視頻又有哪些差異&#xff1f; 影像系統開發&#xff0c;流媒體方向和普通的多媒體影像系統開發有一定差異。 相同點在于圖像多媒體處理…

疫菌QBD案例

本文是《A-VAX: Applying Quality by Design to Vaccines》第七個研究的R語言解決方案。 使用帶兩個中心點的二水平析因設計。運行10次實驗。結果是分辨度為III的設計。 A <- c(25,25,15,15,15,25,25,20,15,20) B <- c(12,8,8,12,8,12,8,10,12,10) C <- c(35,15,15…

Linux部署elasticsearch 單機版

Linux部署elasticsearch 1、下載安裝包 Elasticsearch 7.8.0 | Elastic 2、安裝步驟 2.1、上傳安裝包到服務器opt目錄 2.2、解壓 #目錄創建/opt/module cd /opt mkdir module tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module mv elasticsearch-7.8.0 …

IDEA高效快捷鍵指南

1. 編輯類快捷鍵 編輯快捷鍵是最常用的一類&#xff0c;可以幫助我們快速操作代碼&#xff1a; 快捷鍵 功能描述 Mac Windows 熱度 psvm Tab 生成 main 方法 psvm Tab psvm Tab ????? sout Tab 生成 System.out.println() 輸出語句 sout Tab sout Tab…

【論文寫作參考文獻地址】

參考文獻地址 論文的各種參考文獻地址國家哲學社會科學文獻中心國家科技圖書文獻中心 論文的各種參考文獻地址 國家哲學社會科學文獻中心 資源免費!!! 整體配色就是紅色&#xff0c;主頁輪播有些實時新聞。 博主個人感受&#xff0c;對于計算機類的收錄不是特別的充足 國家科…

華為OD機考-貨幣單位換算-字符串(JAVA 2025B卷)

純暴力解法 import java.util.*; public class ExchangeMoney {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while(scanner.hasNextLine()){int count Integer.parseInt(scanner.nextLine());List<String> strings new ArrayLi…