解决dubbo错误ip及ip乱入问题的方法
问题
在本地启动dubbo时,服务注册在本地的zookeeper,但是注册IP却不是本地的iP。产生问题,导致consumer找不到provider,访问不了服务。
- 例如本地IP为10.0.0.1,但是zookeeper上的注册ip可能是196.168.0.1
产生原因,随机产生,可能是你重启一下机器,或者电脑小智一段时间就会发生。
- 报错类似
com.alibaba.dubbo.remoting.RemotingException:client(url:dubbo://100.106.199.34:20880/con.xxxx.xxxx.xxxx.xxxx.NginxLogService?accesslog=./logs/xxxx-xxxx-provider-dubbo.log&anyhost=true&application=xxxx-xxxx&check=false&codec=dubbo&default.accesslog=true&default.check=false&default.delay=-1&default.loadbalance=roundrobin&default.retries=0&default.timeout=60000&delay=-1&dubbo=2.8.4&generic=false&heartbeat=60000&interface=cn.xxxx.xxxx.xxxx.xxxx.NginxLogService&logger=slf4j&methods=getModelPage&organization=xxxx&owner=xxxx&pid=38690&side=consumer×tamp=1545988767460)failedtoconnecttoserver/100.106.199.34:20880client-sidetimeout3000ms(elapsed:3004ms)fromnettyclient100.106.199.34usingdubboversion2.8.4 atcom.alibaba.dubbo.remoting.transport.netty.NettyClient.doConnect(NettyClient.java:147) atcom.alibaba.dubbo.remoting.transport.AbstractClient.connect(AbstractClient.java:280) atcom.alibaba.dubbo.remoting.transport.AbstractClient$1.run(AbstractClient.java:145) atjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) atjava.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) atjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) atjava.lang.Thread.run(Thread.java:745)
Causedby:org.springframework.remoting.RemoteConnectFailureException:Couldnotconnecttoremoteservice[rmi://192.168.72.235:20881/com.ztesoft.zsmartcity.ynzw.demo.service.DemoService];nestedexceptionisjava.rmi.ConnectException:Connectionrefusedtohost:127.0.0.1;nestedexceptionis:
Causedby:java.lang.IllegalStateException:Failedtocheckthestatusoftheservicecom.xxx.xxx.service.LoginService.Noprovideravailablefortheservicecom.xxxx.xxxx.service.LoginService:3.0fromtheurlzookeeper://202.106.199.37:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=xxx&application.version=3.0&check=false&default.timeout=5000&dubbo=2.5.3&interface=com.xxx.xxx.service.LoginService&methods=aLogin,bPassword,userLogin,modifyPasswordLogin,validate,fVersion,xLogout,userLogout,getTest,getCode,aLogin,aToken,aUser&pid=2200&revision=1.0&side=consumer×tamp=1462534379328&version=3.0totheconsumer202.106.199.37usedubboversion2.5.3
解决方法
在程序配置文件中配置dubbo的注册中心“dubbo.registry.address”时要注意不要配置127.0.0.1要配置为localhost。
然后在配置本地的/etc/hosts文件中
127.0.0.1localhost
问题原因
怀疑原因:为本地配置127.0.0.1时由于连着网络所以dns解析解析到了你的网络上了。么有解析到本机造成的。但是并不确定是不是这个原因。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接