关于Seata部署和配置中遇到的摸棱两可的场景
Seata事务分组的正确实践
seata的文档和github上的案例着实有点坑人了!
○server端配置
server端根据文档中的 高可用部署 进行配置,其中修改config.txt
中的 service.vgroupMapping.my_test_tx_group
是一个错误的配置项,具体在github中 seata/seata-samples
中的 springcloud-nacos
下的文档中说明了 高版本的不可使用下划线 需使用上划线。(文档中却不说明)
my_test_tx_group 其实是一个分组名,可以自行决定!
seata通过该分组名找到 seata-server
对应的集群名称,然后在找到该集群的服务列表。
因此在配置config.txt
时 service.vgroupMapping.xxxx
后面的值为集群名称。在使用nacos进行注册时,该集群名称在registry.conf
中的 nacos.cluster
决定。因此config.txt
中的 service.xxxx.grouplist
是可以不用配置的(仅在文件模式下有效)。
○client端配置
seata-samples
有太多老样例没更新了,根本不能作为参考。
在 application.yml
中可以配置 nacos
注册中心和配置中心的地址及参数,最重要的是配置 seata.tx-service-group
该项对应了 server 端中的 service.vgroupMapping.xxxx
因此在同一个组内的微服务需要配置相同的分组名。
1.4.2 clinet端默认在注册中心中找 SEATA_GROUP 下的seata-server集群,因此部署server端时需要更改nacos配置下的 group 为 SEATA_GROUP
值得注意的是 spring.cloud.alibaba.seata.tx-service-group 也是配置分组名的选项 显然与seata中的选项重复了! 在两年前的官方样例和目前官方文档之事务分组章节中使用的是改项,个人认为这是一个过时的选项 可以不用管它