seata学习笔记(一)——springcloud集成seata

便于简单展示,只配置了两个服务之间,用于验证seata分布式事务

seata server启动

从seata官网下载seata server包,包中自带了bat和sh启动脚本,注册方式修改为eureka(registry.conf)

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "eureka"

  nacos {
    application = "seata-server"
    serverAddr = "localhost"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
...

完成注册


整体项目结构
order服务引入seata及seata配置

pom.xml

<!-- seata -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-seata</artifactId>
            <version>2.2.0.RELEASE</version>
            <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.2.0</version>
        </dependency>

application.yml

# seata配置
seata:
  enabled: true
  application-id: order-seata
  tx-service-group: cloud-web_tx_group
  registry:
    type: eureka
    eureka:
      service-url: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/
  service:
    vgroup-mapping:
      cloud-web_tx_group: default
GlobalTransactional配置全局事务
/**
     * 模拟下单操作,验证分布式事务
     * @param id
     * @return
     */
    @GlobalTransactional
    @GetMapping("/{id}/add")
    public void add(@PathVariable Integer id) {
        orderService.add(id);
    }

add接口中模拟分布式事务,

@Override
    public void add(Integer userId) {
        //新增一条订单记录
        Order order = new Order();
        order.setUserId(1);
        order.setProductId(1);
        order.setPayAmount(1D);
        order.setStatus("1");
        order.setAddTime(new Date());
        order.setLastUpdateTime(new Date());
        this.save(order);

        //更新账户信息,模拟分布式事务
        accountFeignService.updateAccount(userId);

    }
account服务中配置类似

源码地址https://github.com/cfpl1201/pinpoint_mybatis.git

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 欢迎关注专栏:后端架构技术精选。里面有大量关于的Java高级架构知识点分享,还有各种面试趣闻以及程序员身边事,如有...
    程序员技术圈阅读 4,562评论 0 1
  • 一、什么是分布式事务问题? 1.1 单体应用 单体应用中,一个业务操作需要调用三个模块完成,此时数据的一致性由本地...
    AC编程阅读 5,839评论 1 8
  • 一、概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务...
    皮多堡阅读 4,300评论 0 6
  • 一、Seata介绍 全局的跨数据库的多数据源的统一调度。微服务环境下,原来的多个模块被拆分为多个独立的应用,分别使...
    CJ21阅读 6,164评论 0 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,957评论 2 7