当前位置:   article > 正文

seata异常:io.seata.common.exception.FrameworkException: No available service

no available service

参考文章(写得不错)Seata 1.4.0 + nacos配置和使用,超详细_机械广的博客-CSDN博客_seata1.4

1.基础设置:

按照user guide中的account - storage -order的顺序启动,一切正常,nacos中可以看到有三个provider和一个comsumer,并且seata-server这个服务也注册进了nacos。

但是在启动DubboBusinessTester 进行测试的时候,报以下错误:

  1. 15:04:16,743 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
  2. 15:04:16,743 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - Could not find an appender named [STDOUT]. Did you define it below instead of above in the configuration file?
  3. 15:04:16,743 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - See http://logback.qos.ch/codes.html#appender_order for more details.
  4. 15:04:16,743 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
  5. 15:04:16,743 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@224aed64 - Registering current configuration as safe fallback point
  6. Exception in thread "main" io.seata.common.exception.FrameworkException: No available service
  7. at io.seata.core.rpc.netty.AbstractNettyRemotingClient.loadBalance(AbstractNettyRemotingClient.java:265)
  8. at io.seata.core.rpc.netty.AbstractNettyRemotingClient.sendSyncRequest(AbstractNettyRemotingClient.java:141)
  9. at io.seata.tm.DefaultTransactionManager.syncCall(DefaultTransactionManager.java:95)
  10. at io.seata.tm.DefaultTransactionManager.begin(DefaultTransactionManager.java:53)
  11. at io.seata.tm.api.DefaultGlobalTransaction.begin(DefaultGlobalTransaction.java:105)
  12. at io.seata.tm.api.TransactionalTemplate.beginTransaction(TransactionalTemplate.java:215)
  13. at io.seata.tm.api.TransactionalTemplate.execute(TransactionalTemplate.java:122)
  14. at io.seata.spring.annotation.GlobalTransactionalInterceptor.handleGlobalTransaction(GlobalTransactionalInterceptor.java:181)
  15. at io.seata.spring.annotation.GlobalTransactionalInterceptor.invoke(GlobalTransactionalInterceptor.java:150)
  16. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  17. at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
  18. at io.seata.samples.nacos.service.impl.BusinessServiceImpl$$EnhancerBySpringCGLIB$$ee303a00.purchase(<generated>)
  19. at io.seata.samples.nacos.starter.DubboBusinessTester.main(DubboBusinessTester.java:39)

2.参考seata常见问题的答案:

这是什么原因呢?是什么造成了这种异常?可以参考seata经典问答:Seata常见问题

Q: Nacos 作为 Seata 配置中心时,项目启动报错找不到服务。如何排查,如何处理?

A: 异常:io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.

  1. 查看nacos配置列表,seata配置是否已经导入成功
  2. 查看nacos服务列表,serverAddr是否已经注册成功
  3. 检查client端的registry.conf里面的namespace,registry.nacos.namespace和config.nacos.namespace填入nacos的命名空间ID,默认"",server端和client端对应,namespace 为public是nacos的一个保留控件,如果您需要创建自己的namespace,最好不要和public重名,以一个实际业务场景有具体语义的名字来命名
  4. nacos上服务列表,serverAddr地址对应ip地址应为seata启动指定ip地址,如:sh seata-server.sh -p 8091 -h 122.51.204.197 -m file
  5. 查看seata/conf/nacos-config.txt 事务分组service.vgroupMapping.trade_group=default配置与项目分组配置名称是否一致
  6. telnet ip 端口 查看端口是都开放,以及防火墙状态
  1. 注:
  2. 1.080版本启动指定ip问题,出现异常Exception in thread "main" java.lang.RuntimeException: java.net.BindException: Cannot assign request address,请升级到081以上版本
  3. 2.项目使用jdk13,启动出现
  4. Error: Could not create the Java Virtual Machine.
  5. Error: A fatal exception has occurred. Program will exit.
  6. 如环境为sh,替换脚本中最后一段:
  7. exec "$JAVACMD" $JAVA_OPTS -server -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="$BASEDIR"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+
  8. UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -verbose:gc -Dio.netty.leakDetectionLevel=advanced \
  9. -classpath "$CLASSPATH" \
  10. -Dapp.name="seata-server" \
  11. -Dapp.pid="$$" \
  12. -Dapp.repo="$REPO" \
  13. -Dapp.home="$BASEDIR" \
  14. -Dbasedir="$BASEDIR" \
  15. io.seata.server.Server \
  16. "$@"

发现第一条有问题,没有将seata的配置导入nacos:

找了一篇文章:https://blog.csdn.net/qq853632587/article/details/111644295 按照里面的步骤,将seata的配置导入了nacos(也请参考http://seata.io/zh-cn/blog/seata-nacos-analysis.html)

但是发现仍然没有解决问题,怎么办呢?继续看呗

3.尝试其它方式:

参考了以下几篇文章:

参考上面第一篇文章后,修改访问seata server的客户端seata-all的版本,将其由1.4.2改成1.3.0,问题解决。(如果还不好使,换其它版本试试)

  1. <dependency>
  2. <groupId>io.seata</groupId>
  3. <artifactId>seata-all</artifactId>
  4. <!-- <version>${seata.version}</version> -->
  5. <version>1.3.0</version>
  6. </dependency>

另外两篇文章也可以看看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/312796
推荐阅读
相关标签
  

闽ICP备14008679号