我是靠谱客的博主 热心水杯,最近开发中收集的这篇文章主要介绍SpringCloudAlibaba→Seata:集成SpringBoot详细步骤,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Seata集成SpringBoot

  • 详细步骤
    • 1)依赖引入
    • 2)配置Seata
    • 3)代理数据源
    • 4)全局事务控制
    • 5)分布式事务测试

详细步骤

集成SpringBoot可以按照如下步骤实现(默认seataServer已经安装好了并且启动了):

  1. 引入依赖包spring-cloud-starter-alibaba-seata
  2. 配置Seata
  3. 创建代理数据源
  4. @GlobalTransactional全局事务控制

项目结构图:
在这里插入图片描述

1)依赖引入

【用到seata的项目都要引入依赖】
我们首先在 hailtaxi-driverhailtaxi-order中引入依赖:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

2)配置Seata

【用到seata的项目都要添加如下配置】

依赖引入后,我们需要在项目中配置SeataClient端信息,关于SeataClient端配置信息,官方也给出了很多版本的模板,可以打开https://github.com/seata/seata/tree/1.4.0/script,如下图:
在这里插入图片描述
我们可以选择spring,把 application.yml文件直接拷贝到工程中,文件如下:

seata:
  enabled: true
  application-id: applicationName
  #当前分布式事务所对应的组【一般自己修改,默认为:my_test_tx_group】
  tx-service-group: seata_transcation
  enable-auto-data-source-proxy: true
  data-source-proxy-mode: AT
  use-jdk-proxy: false
  excludes-for-auto-proxying: firstClassNameForExclude,secondClassNameForExclude
  client:
    rm:
      async-commit-buffer-limit: 1000
      report-retry-count: 5
      table-meta-check-enable: false
      report-success-enable: false
      saga-branch-register-enable: false
      saga-json-parser: fastjson
      lock:
        retry-interval: 10
        retry-times: 30
        retry-policy-branch-rollback-on-conflict: true
    tm:
      commit-retry-count: 5
      rollback-retry-count: 5
      default-global-transaction-timeout: 60000
      degrade-check: false
      degrade-check-period: 2000
      degrade-check-allow-times: 10
    undo:
      data-validation: true
      log-serialization: jackson
      log-table: undo_log
      only-care-update-columns: true
    log:
      exceptionRate: 100
  service:
    #    默认为【vgroup-mapping:】需要修改为驼峰命名规则
    vgroupMapping:
      #      默认为【my_test_tx_group: default】,需要修改为【tx-service-group】的值
      seata_transcation: default
    grouplist:
      #      seataServer安装的地址
      default: 192.168.80.16:8091
    enable-degrade: false
    disable-global-transaction: false
  transport:
    shutdown:
      wait: 3
    thread-factory:
      boss-thread-prefix: NettyBoss
      worker-thread-prefix: NettyServerNIOWorker
      server-executor-thread-prefix: NettyServerBizHandler
      share-boss-worker: false
      client-selector-thread-prefix: NettyClientSelector
      client-selector-thread-size: 1
      client-worker-thread-prefix: NettyClientWorkerThread
      worker-thread-size: default
      boss-thread-size: 1
    type: TCP
    server: NIO
    heartbeat: true
    serialization: seata
    compressor: none
    enable-client-batch-send-request: true
#  config:
#    type: file
#    consul:
#      server-addr: 127.0.0.1:8500
#    apollo:
#      apollo-meta: http://192.168.1.204:8801
#      app-id: seata-server
#      namespace: application
#      apollo-accesskey-secret: ""
#    etcd3:
#      server-addr: http://localhost:2379
#    nacos:
#      namespace:
#      serverAddr: 127.0.0.1:8848
#      group: SEATA_GROUP
#      username: ""
#      password: ""
#    zk:
#      server-addr: 127.0.0.1:2181
#      session-timeout: 6000
#      connect-timeout: 2000
#      username: ""
#      password: ""
#    custom:
#      name: ""
  registry:
    type: nacos
    load-balance: RandomLoadBalance
    load-balance-virtual-nodes: 10
    file:
      name: file.conf
    nacos:
      application: seata-server
      server-addr: 114.215.191.164:8848
      group : "DEFAULT_GROUP"

#    consul:
#      server-addr: 127.0.0.1:8500
#    etcd3:
#      serverAddr: http://localhost:2379
#    eureka:
#      weight: 1
#      service-url: http://localhost:8761/eureka
#    redis:
#      server-addr: localhost:6379
#      db: 0
#      password:
#      timeout: 0
#    sofa:
#      server-addr: 127.0.0.1:9603
#      region: DEFAULT_ZONE
#      datacenter: DefaultDataCenter
#      group: SEATA_GROUP
#      addressWaitTime: 3000
#      application: default
#    zk:
#      server-addr: 127.0.0.1:2181
#      session-timeout: 6000
#      connect-timeout: 2000
#      username: ""
#      password: ""
#    custom:
#      name: ""

关于配置文件内容参数比较多,我们只需要掌握核心部分:

seata_transaction: default:事务分组,前面的seata_transaction可以自定义,通过事务分组很方便找到集群节点信息。

tx-service-group: seata_transaction:指定应用的事务分组,和上面定义的分组前部分保持一致。
default: 192.168.211.145:8091:服务地址,seata-server服务地址。

3)代理数据源

【用到seata的项目都要配置代理数据源】
通过代理数据源可以保障事务日志数据和业务数据能同步,关于代理数据源早期需要手动创建,但是随着Seata版本升级,不同版本实现方案不一样了,下面是官方的介绍:
在这里插入图片描述
我们当前的版本是1.3.0,所以我们创建代理数据源只需要在启动类上添加
@EnableAutoDataSourceProxy注解即可。在 Dirver和Order项目的主启动类上添加该注解:
在这里插入图片描述

4)全局事务控制

假设现在有下单->修改司机信息->创建订单3个操作同时在 hailtaxi-order 工程中执行,打车成功创建订单是由客户发起,在 hailtaxi- order中执行,并且feign调用hailtaxi-driver ,所以 hailtaxi-order是全局事务入口,我们在OrderInfoServiceImpl.addOrder()方法上添加 @GlobalTransactional,那么此时该方法就是全局事务的入口,为了测试事务,我们在代码中添加一个异常,代码如下:
在这里插入图片描述

5)分布式事务测试

我们此时执行请求 http://localhost:18082/order/addOrder?id=123,我们可以看到执行的最终结果是失败。
在这里插入图片描述
但是控制台可以看到driver其实是执行成功了的。因为driver是在发生异常前就执行了的。所以肯定能成功。
在这里插入图片描述
此时这种情况就需要全局事务控制,我们去数据库看看司机的状态是否改变了。
在这里插入图片描述
我们可发现,司机的状态并没有改变,这就是说全局事务控制起了效果。

最后

以上就是热心水杯为你收集整理的SpringCloudAlibaba→Seata:集成SpringBoot详细步骤的全部内容,希望文章能够帮你解决SpringCloudAlibaba→Seata:集成SpringBoot详细步骤所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部