seata no available service 'null' found, please make sure registry config correct

 最近学习seata的时候报了错误no available service 'null' found, please make sure registry config correct,服务名在配置文件中都有的,没办法只能跟源码了

环境springcloud Hoxton.SR3 +Springboot 2.2.5.RELEASE+seata1.1+nacos1.4

seata包下载太慢了,直接使用的编译版本1.2-SNAPSHOT

本人遇到这个问题有两个原因

1.没有使用官网的配置,直接拿的别人的配置文件导入的

2.没有引入依赖引起

下面看看原因

报错的源码seata1.0

io.seata.core.rpc.netty.NettyClientChannelManager#reconnect

void reconnect(String transactionServiceGroup) {
        List<String> availList = null;
        try {
            availList = getAvailServerList(transactionServiceGroup);
        } catch (Exception e) {
            LOGGER.error("Failed to get available servers: {}", e.getMessage(), e);
            return;
        }
        if (CollectionUtils.isEmpty(availList)) {
            String serviceGroup = RegistryFactory.getInstance()
                                                 .getServiceGroup(transactionServiceGroup);
            LOGGER.error("no available service '{}' found, please make sure registry config correct", serviceGroup);
            return;
        }
        for (String serverAddress : availList) {
            try {
                acquireChannel(serverAddress);
            } catch (Exception e) {
                LOGGER.error("{} can not connect to {} cause:{}",FrameworkErrorCode.NetConnect.getErrCode(), serverAddress, e.getMessage(), e);
            }
        }
    }
io.seata.discovery.registry.RegistryService#getServiceGroup
String PREFIX_SERVICE_MAPPING = "vgroup_mapping.";
/**
* The constant PREFIX_SERVICE_ROOT.
*/
String PREFIX_SERVICE_ROOT = "service";
/**
* The constant CONFIG_SPLIT_CHAR.
*/
String CONFIG_SPLIT_CHAR = ".";
default String getServiceGroup(String key) {
Configuration config = ConfigurationFactory.getInstance();
return config.getConfig(PREFIX_SERVICE_ROOT + CONFIG_SPLIT_CHAR + PREFIX_SERVICE_MAPPING + key);
}

  上面红色部分就是根源所在,1.1版本之后

vgroup_mapping改成vgroupMapping了
所以大家在导入的seata配置的时候直接上源码下面的script目录下去找配置文件修改好了导入,1.1之后之前的nacos-config.txt也去掉了nacos

 

nacos-config.sh在上面nacos目录中

所以大家如果使用1.1版本以上的seata组名记得用

vgroupMapping,1.0及之前的用vgroup_mapping,记得所有含有这个的都要一起改哦
另外一个原因就是你的模块没有引入spring-cloud-alibaba-seata依赖引起的


欢迎有兴趣的同学加入 513650703一起学习

posted @ 2020-03-20 08:21  学无终  阅读(28641)  评论(2编辑  收藏  举报