pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

springcloud整合seata的實現代碼

這篇文章主要介紹了springcloud整合seata的實現方法,整合步驟通過引入spring-cloud-starter-alibaba-seata?jar包,文中結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

一、背景

在上一篇文章中,我們使用Seata整合了SpringBoot,在這篇文章中我們使用Seata整合SpringCloud。同時有了上一篇文章的基礎,此處我們簡單實現。

二、項目結構

三、實現功能:

完成用戶下單操作,下單分為調用 賬戶服務 扣除余額,調用訂單服務創建訂單。

四、項目使用到的技術

Spring Cloud 、eureka、openfeign、seata 、nacos、druid、mybatis-plus

五、整合步驟

1、引入spring-cloud-starter-alibaba-seata jar包

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <version>2021.1</version>
    <exclusions>
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

參考文檔: https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

2、涉及到的業務庫操作

1、業務庫需要存在 undo_log 表

CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) 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 COMMENT ='AT transaction mode undo table';

2、業務表主鍵

業務表中必須包含單列主鍵,如果存在多列主鍵,則目前只有mysql支持。

3、頁面中自動更新時間戳

業務表中最好不要自動更新時間戳,使用手動更新,更新數據,只更新用到的數據。
比如:
表中存在10個字段,當前業務只需要更新3個字段,此時我們更新3個字段即可,不要更新10個字段,如果update_time字段是默認更新的,則使用手動更新。

3、開啟數據源代理

1、自動配置數據源代理

seata:
  enabled: true
  # 是否自動開啟數據源代理
  enable-auto-data-source-proxy: true
  # 數據源代理模式,使用AT模式
  data-source-proxy-mode: AT

2、手動配置AT模式數據源代理

1、配置文件關閉自動數據源代理

seata:
  # 是否自動開啟數據源代理
  enable-auto-data-source-proxy: false

2、配置配置數據源

AT模式下返回的數據源一定需要是 DataSourceProxy

@Bean
    public DataSource dataSourceProxy() {
        // 某一個數據源
        XxxDataSource xxxDataSource = new XxxDataSource();
        // 設置數據源的各種配置屬性
        xxxDataSource.setXXX("");
        // 使用 DataSourceProxy 來包裝一下
        return new DataSourceProxy(xxxDataSource);
    }

4、傳遞 xid

在引入了 spring-cloud-starter-alibaba-seata 后,很多都已經實現了自動傳遞 xid 。同時在分布式事務結束后,需要清除xid的值。

默認實現了 feignrestweb3種方式的 xid的傳遞。

5、事務分組和seata server對應上

6、注冊中心和配置中心

應用程序中 seata 的配置中心和 注冊中心 需要和 seata server 的保持一致。

7、業務方法加上@GlobalTransactional 注解

在需要開啟分布式事務的方法上加入 @GlobalTransactional 注解,開啟分布式事務。

public class BusinessServiceImpl implements BusinessService {
    private final OrderService orderService;
    private final AccountClient accountClient;
    @Override
    // 開啟分布式事務
    @GlobalTransactional(rollbackFor = Exception.class)
    public void createAccountOrder(Integer accountId, Long amount, boolean hasException) {
        System.out.println("xid:" + RootContext.getXID());
        // 1、遠程扣減賬戶余額
        remoteDebit(accountId, amount);
        // 2、下訂單
        orderService.createOrder(accountId, amount);
        if (hasException) {
            throw new RuntimeException("發生了異常,分布式事物需要會滾");
        }
    }
    private void remoteDebit(Integer accountId, Long amount) {
        String result = accountClient.debit(accountId, amount);
        log.info("遠程扣減庫存結果:[{}]", result);
    }
}

六、演示

分布式事務發生異常,事務回滾

七、完整代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/seata/seata-springcloud-mybatis-plus

八、參考文檔

1、新人文檔

2、seata常見問題

到此這篇關于springcloud整合seata的文章就介紹到這了,更多相關springcloud整合seata內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 元拓建材集团官方网站 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 鑫达滑石-辽宁鑫达滑石集团 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 家乐事净水器官网-净水器厂家「官方」 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 深圳市人通智能科技有限公司| 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 |