半工半搞的,同事用了0.8.0的,现在最新是1.1.0,自己没配置成,周末继续研究
实践:
1.下载seata-server1.1.0 修改registry.con file.conf 指向consul 作为服务注册中心 数据库做为存储事务的 用于回滚
2.配置spring clound服务
3.测试事务回滚问题
环境说明:
seata-server版本1.1.0 如果没有可以去我的资源免费下载
spring clound使用的:Greenwich.SR2
sprint boot:2.1.8.RELEASE
spring-cloud-starter-consul-discovery:2.2.0.RELEASE
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.1.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.1.0</version>
</dependency>
改了consul-api的版本 要不然会报监听类找不到 大部分是需要最新的jar包
consol-api需要使用1.4.1
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
<version>1.4.3</version>
</dependency>
seata-server 服务端的配置 目标使用consul注册中心 将seata-server注册上去
registry.conf 注册配置
registry type改为consul
type = "consul"
consul指向consul服务端 将会向服务端注册一个服务 后续的客户端程序也需要保持相同的配置
consul {
cluster = "seata-server"
serverAddr = "127.0.0.1:8500"
}
config 存储的配置文件 默认还是指向file.conf 使用file的配置 客户端程序也是需要
再将服务端的file.conf registry.conf复制到resources即可
file.conf修改 使用server中的file-example.conf将里面的复制过去 修改内容
service:
vgroupMapping.事务分组名称="自定义事务名称"
自定义事务名称.grouplist = "对应的consul服务ip+端口"
例如:
vgroupMapping.my_test_tx_group = "seata1"
#only support when registry.type=file, please don't set multiple addresses
seata1.grouplist = "127.0.0.1:8091"
store配置
修改mode="db"
前提是要配置好数据库 需要将server需要的3个表放到数据库 这里配置连接到该数据库上
如:
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata110"
user = "root"
password = "root"
其他不改
剩下的是spring clound服务的配置了
1.将seata-server的配置文件 复制到resource下 file.conf resource.conf
2.启动类添加:@EnableAutoDataSourceProxy
3.
对应yml
spring: cloud:
consul: alibaba:
seata:
tx-service-group: my_test_tx_group
其他的就不用了 不用像0.8.0那样修改datasource代理 还有增加fegin的id 还有globalTransaction id 这些都会加上去的
程序启动日志:
2020-03-29 15:59:05.896 INFO 13156 --- [ main] s.s.a.d.SeataDataSourceBeanPostProcessor : Auto proxy of [druidDataSource]
2020-03-29 15:59:05.957 INFO 13156 --- [ main] i.s.common.loader.EnhancedServiceLoader : load DbTypeParser[druid] extension by class[io.seata.sqlparser.druid.DruidDelegatingDbTypeParser]
2020-03-29 15:59:05.975 INFO 13156 --- [ main] i.s.common.loader.EnhancedServiceLoader : load RegistryProvider[Consul] extension by class[io.seata.discovery.registry.consul.ConsulRegistryProvider]
2020-03-29 15:59:06.392 INFO 13156 --- [ main] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.56.1:8091
2020-03-29 15:59:06.393 INFO 13156 --- [ main] io.seata.core.rpc.netty.RmRpcClient : RM will register :jdbc:mysql://47.112.130.230:3306/kitty_test
2020-03-29 15:59:06.398 INFO 13156 --- [ main] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:RMROLE,address:192.168.56.1:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://192.168.56.1:3306/test', applicationId='jy-user', transactionServiceGroup='my_test_tx_group'} >
Auto proxy of druidDataSource-->RegistryProvider consul-->RM will register-->transactionRole:-->
register RM success
NettyPool create channel to transactionRole:TMROLE,address:192.168.56.1:8091,msg:
< RegisterTMRequest{applicationId='jy-user', transactionServiceGroup='my_test_tx_group'} >
对应应用id group对应配置文件的
register success, cost 435 ms, version:1.1.0,role:TMROLE,channel:[id: 0xe5bf8da8, L:/192.168.56.1:56235 - R:/192.168.56.1:8091]
注册成功的
网上这种整合太少 有研究可以交流 哈