【开发问题记录】启动某个微服务时无法连接到seata(seata启动或配置异常)

一、问题描述

1.1 问题复现

1.1.1 将Linux中的部分微服务启动

  • docker start xxx
  • docker ps -a

在这里插入图片描述


  • 然后这些服务都会被注册到nacos中

在这里插入图片描述


  • 包含一些通用的配置服务

在这里插入图片描述


1.1.2 在本地启动当时出错的服务

  • 启动后,刷新前端页面,出现了报错异常,报错信息为
  • no available service found in cluster 'default',please make sure registry config correct and keep your seata server running
  • 看报错内容说明是在集群default中没有找到可用的服务,确保配置文件正确并保证seata服务正常启动

在这里插入图片描述


1.2 解决思路

根据这个异常提示信息,我先是查看了nacos中的seata相关的配置信息,然后又去linux中查看了seata的日志信息

1.2.1 Nacos中seata相关的信息

  • 首先seata服务启动是正常的

在这里插入图片描述


  • 检查seata的yaml文件内容,没有发现什么问题

在这里插入图片描述

1.2.2 Linux中seata相关的信息

  • 查看linux中seata的日志信息,看看有没有报错提示
  • docker logs -f seata
  • 发现了一些与Mysql相关的错误信息,好像是Mysql没有连接上

在这里插入图片描述

  • 然后查看MySql的日志信息
  • docker logs -f mysql
  • MySQL中没有发现特别的报错信息,但是有一个“不允许操作”的提示

在这里插入图片描述


二、问题解决

由于我这篇文章是解决完问题之后才总结的,我觉得应该会有一些读者大佬在看到我上面的问题复现时就已经看出问题所在了,我当时在找的时候确实没有发现,不过后来发现后在解决的时候又有一个小失误

2.1 seata的配置错误

  • 其实问题一开始就可以找到,只是我对这块不是很熟悉,我这里的错误需要对照两块内容:
    • 一个就是异常中提到的集群‘default’中找不到可用的微服务,这是因为我的Nacos中seata的配置文件里没有配置集群‘default’
    • 至于另一个当时没有发现命名空间的问题,这还是在看到Linux中seata的配置文件里的命名空间跟Nacos中的不一样才明白过来

2.1.1 Nacos中seata的配置问题

错误版本:

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.113.128:8848 # nacos地址
      namespace: "c975b6f4-de7e-40ad-9b15-4a245ce7a2ef" # namespace,默认为空
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
      username: nacos
      password: nacos
  tx-service-group: tjxt # 事务组名称
  service:
    vgroup-mapping: # 事务组与cluster的映射关系
      tjxt: "default"
  • 这里是没有配置集群cluster及后面发现的命名空间的错误

正确版本:

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.113.128:8848 # nacos地址
      namespace: "f923fb34-cb0a-4c06-8fca-ad61ea61a3f0"
      cluster: "default"
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
      username: nacos
      password: nacos
  tx-service-group: tjxt # 事务组名称
  service:
    vgroup-mapping: # 事务组与cluster的映射关系
      tjxt: "default"

2.1.2 命名空间问题的发现

  • 这个问题起初是在Linux中seata的配置文件中发现的
  • docker exec -it seata bash
  • ls
  • cd resources/
  • cat application.yml
  • 找到seata的部分,发现命名空间不一样

在这里插入图片描述

  • 其实最后才发现,这里的命名空间就是Nacos中微服务—>服务列表后面的内容:

在这里插入图片描述


2.2 网络连接(一个小失误)

  • 解决完这些后发现还是报错,尝试了好久发现网络ping不通,最后发现是我的Windows防火墙没关,这样才导致我本地访问不到Linux中的IP和端口。
  • 至此,问题解决!

三、问题总结

导致这次问题出现的原因有两个:

  • 1.第一个就是seata的配置问题,这里要注意检查Nacos中的配置和Linux容器中seata的配置
  • 2.第二个是网络连接的问题,在本地与虚拟机之间要进行网络连接,需要关闭双方的防火墙,避免访问不到对方的IP和端口。
  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微服务架构中,分布式事务是一个比较复杂的问题,阿里Seata是一个比较好的解决方案。下面是阿里Seata配置流程: 1. 下载Seata Server 在阿里Seata的官方网站中下载Seata Server的压缩包。 2. 解压Seata Server 将Seata Server的压缩包解压到指定目录下。 3. 修改Seata Server配置文件 修改解压后的Seata Server目录下的conf目录下的file.conf文件。主要需要修改的是store.mode参数,将其修改为db,表示使用数据库存储分布式事务相关数据。 4. 创建数据库 根据Seata Server的配置文件中的store.db配置项,创建一个数据库,并将数据库连接信息配置Seata Server的配置文件中。 5. 执行数据库脚本 在Seata Server的压缩包中,有一个db_store脚本文件,按照其中的说明,执行该脚本文件,完成数据库表的创建。 6. 启动Seata Server 在Seata Server的bin目录中执行seata-server.bat或seata-server.sh启动Seata Server。 7. 在微服务配置Seata微服务中引入Seata的相关依赖,并在配置文件中配置Seata的相关参数,如:seata.tx-service-group、seata.service.vgroup-mapping和seata.service.grouplist。 8. 配置微服务数据库 在微服务的数据库中,为每个分布式事务增加一个undo_log表,用于记录分布式事务的操作日志。 以上就是阿里Seata配置流程,需要注意的是,Seata配置和使用需要一定的技术能力和经验,建议在实际使用前进行充分的学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶落闲庭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值