一、Seata服务搭建

1. 拉取seata服务的镜像(seata-seaver)

# 这里我们选择拉取1.2.0的版本,目前应该是最新的
docker pull seataio/seata-server:1.2.0
# 查看一下镜像,虽然没什么卵用
docker images

在这里插入图片描述如果出现这个就说明拉取镜像成功

2. 上传配置到配置中心

  • 因为我使用的是Nacos作为配置中心,所以现在要把配置上传到nacos,这个参照一下官网的上传方式就好了http://seata.io/zh-cn/docs/user/configurations.html,拉到下面发现有个标黄的地方给他展开。
    在这里插入图片描述
  • 但是到这里可能并没什么卵用,因为我用的是docker(为什么是Docker呢,个人习惯吧,平时搭环境用docker会方便一点),不是下载的二进制文件,所以他这种方式弄不了。那么重点来了:我们简单讲一下上传原理,就是通过脚本读取配置文件里面的配置项,然后调用Nacos的Api来上传每一项配置(因为我用的是nacos,所以举例也用naocs,其他的注册中心原理一样)
  • 接下来我提供一下gtihub上的配置文件和脚本,上传的时候注意一下图片中的这个路径

3. 接下来启动镜像

 # 启动seata-server服务
    docker run --name seata-server -d \
        -p 8091:8091 \
        -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
		-e SEATA_IP=192.168.1.195 \
		-e SEATA_PORT=8091 \
        -v /usr/dvsc/seata1.2.0/registry.conf:/root/seata-config/registry.conf  \
		-v /usr/dvsc/seata1.2.0/logs:/root/logs \
        seataio/seata-server:1.2.0

如果使用了注册中心,则会将SEATA_IP:SEATA_PORT这个地址注册到注册中心,如果不配置的话可能会找不到seata服务。
-v 当前机器的路径:docker容器里面的路径,虽然大家都知道,但是以防忘记。

# registry.conf 的配置内容
registry {
	  	type = "nacos"
	  	nacos {
	    	application = "seata-server"
	    	serverAddr = "192.168.1.191:5280"
	    	namespace = "lp"
	   	 	cluster = "DEFAULT"
	  	}
	}

	config {
  		type = "nacos"
  		nacos {
    		serverAddr = "192.168.1.191:5280"
    		namespace = "seata"
    		group = "DEFAULT_GROUP"
  		}
	}
}
  • 我这里使用了nacos做为配置中心和注册中心
    - 因为我这里挂载了日志目录,所以可以在宿主机查看日志,如果没有挂载,就使用docker logs 容器ID 来查看日志
    如果看日志没有报错,那到这里seata的服务就算是起来了

二、客户端配置

1. 添加Seata依赖包

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-seata</artifactId>
   <version>2.2.0.RELEASE</version>
</dependency>
<dependency>
   <groupId>io.seata</groupId>
   <artifactId>seata-spring-boot-starter</artifactId>
   <version>1.2.0</version>
</dependency>

2. 在项目配置中添加如下配置

# Seata 服务组配置
spring.cloud.alibaba.seata.tx-service-group=DVSC-GOV-GROUP

# seata nacos 注册中心
seata.registry.type=nacos
# 这个地方需要配置的是seata服务的名称,seata会根据这个名称去连接nacos上注册的seata服务
seata.registry.nacos.application=seata-server
seata.registry.nacos.server-addr=192.168.1.191:5280
seata.registry.nacos.namespace=lp
seata.registry.nacos.cluster=DEFAULT
#seata nacos 配置中心:这个配置中心和服务的配置用同一个就行了。
seata.config.type=nacos
seata.config.nacos.server-addr=192.168.1.191:5280
seata.config.nacos.group=SEATA_GROUP
seata.config.nacos.namespace=seata

对应的配置了服务组配置之后,需要在seata对应的配置中心配置里面增加一条:service.vgroupMapping.DVSC-GOV-GROUP=对应的服务分组名,默认写DEFAULT

3. 代码中添加注解

  • 在需要实现分布式事务的方法上添加@GlobalTransactional注解。(如果是实现AT模式的话到这里就可以了)

  • 如果是TCC模式,必须要定义接口来实现服务。格式如下:

    @LocalTCC
    public interface MenuService {
    
        @TwoPhaseBusinessAction(name = "addMenu", commitMethod = "commit", rollbackMethod = "rollback")
        Boolean addTenantMenu(BusinessActionContext actionContext);
    
        Boolean commit(BusinessActionContext actionContext);
    
        Boolean rollback(BusinessActionContext actionContext);
    
    }
    
  • @TwoPhaseBusinessAction注解中的参数,name为必须,但是内容是自定义的,后面两个是提交和回滚的方法配置,如果是commit和rollback可以省略不写,因为是默认的。

三、代码示例

后续补上github代码连接。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐