踩坑 seata: no available service ‘null‘ found, please make sure registry config correct

记录自己的沙雕踩坑。

no available service ‘null’ found, please make sure registry config correct
在这里插入图片描述
springboot 2.2.2
springcloud alibaba 2.1.0
seata 1.0.0
nacos 1.3.0

运到问题,如果第一眼没有头绪的话,自然而然的就跑到百度上需求帮助了。但是,有时候问题是因为自己的奇葩操作引起的,很难在网上找到同样奇葩的人😂。所以查阅了一番,并没有找到跟自己的一样的,不过也通过一些文章找到了思路。

是它让我找到了思路
阅读了上面的文章后,我停止在百度上继续找答案,而是自己尝试从去源码中找答案。

通过日志,我找到了出现错误的类NettyClientChannelManager

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;
        }
        ....
  }

从源码中我们可以看出,我们的错误日志是当availList为空时,才打印出来的。所以应该就是getAvailServerList(transactionServiceGroup);这行代码返回空集合了,追踪进去。

 private List<String> getAvailServerList(String transactionServiceGroup) throws Exception {
 		//getInstance()会找到对应的RegistryService,这与你在regitry.conf中配置的config.type有关,默认是file,支持nacos 、apollo、zk、consul、etcd3
        List<InetSocketAddress> availInetSocketAddressList = RegistryFactory.getInstance()
                                                                            .lookup(transactionServiceGroup);
        if (CollectionUtils.isEmpty(availInetSocketAddressList)) {
            return Collections.emptyList();
        }

        return availInetSocketAddressList.stream()
                                         .map(NetUtil::toStringAddress)
                                         .collect(Collectors.toList());
    }

从代码中可以看出,它会去对应的RegistryService寻找配置信息。

registry.conf文件部分内容

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  }

起初我使用的也是file,但是看了那篇给我灵感的博客后,我修改成了nacos,所以在RegistryFactory.getInstance()时返回给我的时Nacos的实例NacosRegistryServiceImpl
然后去Nacos中找对配置文件的时候,找不到,返回了空集合。想想也是,我并没有在Nacos中添加配置文件。

到这里,我突然明白我工程中的file.conf和registry.conf有什么用了,我当时还纳闷,seata的服务器端不是已经有这俩个文件了吗,为什么我工程里还要这俩个文件。
在这里插入图片描述

于是我将registry.conf文件中,配置文件类型重新改为file

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "file"
  }

然而。。。问题还是没解决。。
后来,我一不小心秒到了,ERROR日志下面的WARN。
在这里插入图片描述
怎么会找不到呢?我仔细检查了一翻配置文件信息。
我工程项目下面的file.conf文件:

service {
  #transaction service group mapping
  vgroup_mapping.my_test_tx_group = "fcp_tx_group"
}

呃呃呃,犯了个低级错误😥

service {
  #transaction service group mapping
  vgroup_mapping.fcp_tx_group= "default"
}

应该是这么写才对。

一句话总结,就是配置文件写错了,应该没有人和我犯一样的低级作物吧。

汗,真的是自己给自己制造麻烦


总之:

  • 配置文件好好配
  • 东西没搞清楚很难受
  • 配置文件模板不要随便用别人的 ,因为不一样的版本,配置文件可能也不相同,尽量去官网中找对应版本的配置文件
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值