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


        
            com.alibaba.cloud
            spring-cloud-alibaba-seata
            2.2.0.RELEASE
            
                
                    io.seata
                    seata-spring-boot-starter
                
            
        
        
            io.seata
            seata-spring-boot-starter
            1.2.0
        

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

你可能感兴趣的:(seata学习笔记(一)——springcloud集成seata)