栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Seata报错 can not get cluster name in registry config ‘service.vgroupMapping.default

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Seata报错 can not get cluster name in registry config ‘service.vgroupMapping.default

SpringCloud Alibab-Seata

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

原Fescar,即分布式事务解决方案。

今天学习使用的时候发现客户端启动成功后控制台一直报错can not get cluster name in registry config 'service.vgroupMapping.default_tx_group', please make sure registry config correct,问题解决过程记录如下:

服务端 seata-server 版本 : 1.5.1

客户端 seata-spring-boot-starter 版本: 1.5.1

复现:

  1. 下载完最新的 seata-server 1.5.1 ,解压后,修改 application.yml配置文件为nacos 方式,然后执行启动文件(在安装目录 binseata-server.bat), 双击直接启动服务端。

  2. 客户端导入 seata-spring-boot-starter 依赖后启动,控制台疯狂报错。can not get cluster name in registry config 'service.vgroupMapping.default_tx_group', please make sure registry config correct

(如果是部署到Linux系统报的这个问题,也是一样的原因)

解决:

方案1:客户端添加 file.conf 和 registry.conf 配置。

1.5.0 ~ 1.5.1 版本关于(seata/script/client/conf/)配置的地址

方案2: 客户端 application.yml 手动添加 事务组默认配置
seata:
  service:
    vgroup-mapping: {"default_tx_group" : "default"}
    grouplist: {"default": "127.0.0.1:8091"}
  • 这一步很坑,我debug看源码发现“事务组配置”(vgroup-mapping() 和 grouplist)默认是有自己赋值的,但不知道为啥最终没有生效,应该是bug。然后我试着自己重复配置一遍vgroup-mapping 和 grouplist,就照抄一下。然后启动服务就又好了,至于什么原因导致“默认配置没有生效”暂时没有时间细找,暂时记录如下。

上面的方案,任选其一,修改后,重启客户端即可。(客户端是指你的SpringBoot项目)

成功解决
  • seata-server 1.5.1 服务端控制台打印 内容如下,表示 该“xxx-order”服务已经成功注册到 seata。运行稳定后,客户端控制也没有再报错了,成功。

解决过程中的坑:
  1. 遇事不决,最稳妥的当然是查官方文档了,于是我查阅了一遍,结果发现官方文档的示例代码还没更新最新的 v1.5.1使用说明(可能变动不是很大所以免了),相当于没有新版的使用说明,只有低版本的说明。

  2. 期间,我查还看了官网的 版本升级指南,从 v1.4.x 升级到 v1.5.x 版本没有涉及到该问题的改动。

  3. 于是曲线救国,去 github找到官方提供的 示例代码子项目(seata-samples) 。

  4. 然后看到,每一个子项目的配置文件都会有 “file.conf” 和“registry.conf”配置文件。后来得知:GitHub上的子项目均使用的 低版本配置的方式(即方案1)。

  1. 同时,我也下载了低版本的 seata-server-1.4.2,下面是 v1.5.1 与 v1.4.2 的conf目录对比图:

总结:
  • 很显然,v1.4.2 使用的是外挂配置的方式(file.conf 和 registry.conf),实际上这种方式里面配置的很多参数我们很多都不需要改动,或者说一般人也不敢改;

  • 而 v1.5.1 版本其中一项优化应该是优化掉 file.conf 和 registry.conf ,然后整合到 了 application.yml中,将大部分不会被改动的参数隐藏起来使用默认配置的方式。

  • 然而,通过上面 方案2 配置与分析,我们可以得知,v1.5.1 优化是优化掉了 file.conf 和 registry.conf文件,但还不够彻底,vgroup-mapping 的默认赋值就没有生效,才导致了这个问题。

  • 解决的办法就是任选其中之一解决。如果是最新版本的V1.5.1,建议使用 方案2,更快捷。其他低版本的可以使用方案1解决。

相关链接:
  • SpringCloud Alibab-Seata 官网
  • Seata 官网“快速入门”文档入口
  • Seata-Server 服务端GitHub下载地址
  • Seata-samples 子项目GitHub地址
  • v1.5.0 - v1.5.1 seata conf配置文件地址
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/981312.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号