seata 版本:1.3.0

项目中在使用 Seata 作为分布式事务的时候,好像特别容易遇到这个错误~
总结原因,还是对Seata配置参数不熟悉导致的。
首先是看到错误描述,找到抛出错误的地方:
看到 getAvailServerList(transactionServiceGroup); 的入参是:transactionServiceGroup。刚好在配置文件中也有一项配置与之对应:

于是,上官网查看相关的参数配置,搜索serviceGroup


将内容拷贝在这里了:

事务分组说明。

  1. 事务分组是什么?
    事务分组是 Seata 的资源逻辑,类似于服务实例。在file.conf中的
    my_test_tx_group就是一个事务分组。
  1. 通过事务分组如何找到后端集群?
    首先程序中配置了事务分组(GlobalTransactionScanner 构造方法的txServiceGroup参数),程序会通过用户配置的配置中心去寻找
    service.vgroupMapping.事务分组配置项,取得配置项的值就是TC集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,
    各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表。
  1. 为什么这么设计,不直接取服务名?
    这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速failover。

根据第 2 点的说明,就可以知道问题所在了:

详细参考官网,这里就不做过多解释:

更多推荐

NettyClientChannelManager : no available service ‘null‘ found, please make sure