使用fescar遇到can not register RM,err:can not connect to fescar-server.

前提

如果你看到了这篇文章,说明你已经成功跑起了阿里爸爸fescar官方提供的example和server,并且你的客户端和服务端之间心跳正常,但是当客户端进行事务操作时却提示以下错误

com.alibaba.fescar.common.exception.FrameworkException: can not register RM,err:can not connect to fescar-server.
	at com.alibaba.fescar.core.rpc.netty.RmRpcClient.doConnect(RmRpcClient.java:357) [fescar-core-0.1.3.jar:na]
	at com.alibaba.fescar.core.rpc.netty.RmRpcClient.connect(RmRpcClient.java:322) [fescar-core-0.1.3.jar:na]
	at com.alibaba.fescar.core.rpc.netty.RmRpcClient.reconnect(RmRpcClient.java:204) [fescar-core-0.1.3.jar:na]
	at com.alibaba.fescar.core.rpc.netty.RmRpcClient.access$000(RmRpcClient.java:65) [fescar-core-0.1.3.jar:na]
	at com.alibaba.fescar.core.rpc.netty.RmRpcClient$1.run(RmRpcClient.java:153) [fescar-core-0.1.3.jar:na]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_144]
	at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308) [na:1.8.0_144]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java) [na:1.8.0_144]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_144]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.29.Final.jar:4.1.29.Final]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]

下面是过程,想马上解决问题的小伙伴可以直接看解决方案

过程

笔者接触fescar是从springcloud-alibaba开始,fescar服务端搭建和集成springcloud可以看这里

问题复现

完全按照根据官方提供的文档执行

一、下载fescar服务端

笔者使用的是v0.1.3版,将fescar-server-0.1.3.tar.gz解压到你的远端服务器,执行启动命令

sh fescar-server.sh 8091 ~/fescar/data/

脚本后第一个参数为端口(需要保证客户端可以访问且一致),第二个参数为fescar的data路径,不需要修改服务端的application.conf中的内容

二、下载sprincloud-alibaba源码并创建对应数据库
  1. 运行文档中的4个建表语句

  2. 下载springcloud-alibaba的master分支上的源码(0.2.2.BUILD-SNAPSHOT),导入idea,可以看到如下结构:
    使用fescar遇到can not register RM,err:can not connect to fescar-server._第1张图片
    修改红框中4个模块的application.conf中的service

    service {
     #vgroup->rgroup
      vgroup_mapping.account-service-fescar-service-group = "localRgroup"
      #only support single node
      localRgroup.grouplist = "你的fescar服务器ip或域名:8091"
     #degrade current not support
     enableDegrade = false
     #disable
     disable = false
    }
    
  3. 修改mysql链接,这个应该不会出现问题

  4. 启动storage和business模块,另外两个不需要启动
    可以看到server端输出如下心跳日志
    使用fescar遇到can not register RM,err:can not connect to fescar-server._第2张图片

  5. 使用postman请求org.springframework.cloud.alibaba.cloud.examples.HomeController下的feign方法

    http://127.0.0.1:18081/fescar/feign

    提示开头的错误

解决方案

  1. 检查防火墙是否开启
  2. 下载fescar的源码版导入idea
    看到server模块的如下内容
    使用fescar遇到can not register RM,err:can not connect to fescar-server._第3张图片
    fescar默认使用的是内网ip,修改方式有多种,修改好后重新打包
1.写死 XID.setIpAddress("当前服务器的外网ip或域名");
2.通过ags传入
if (args.length > 2) {
	XID.setIpAddress(args[2]);
}else{
	XID.setIpAddress(NetUtil.getLocalIp());
}
  1. 将服务端的fescar-server-0.1.3.jar替换为刚才打包的
    使用fescar遇到can not register RM,err:can not connect to fescar-server._第4张图片
  2. 重新执行启动指令(如果你用第二种方式别忘了加上ip的参数),再次尝试feign接口,成功

你可能感兴趣的:(fescar,springcloud,学习记录,坑)