项目 |
描述 |
问题描述 |
多台主机部署,服务均正常运行,调用时报错“服务未注册”,日志中发现异常IP地址 |
定位方法 |
Failed to invoke the method login in the service cn.com.scooper.core.dsapi.service.system.IAuthService. Tried 1 times of the providers [173.173.173.173:20880] (1/1) from the registry 192.168.101.9:6379 on the consumer 192.168.105.129 using the dubbo version 2.5.7. Last error is: Failed to invoke remote method: login, provider: dubbo://173.173.173.173:20880/cn.com.scooper.core.dsapi.service.system.IAuthService?anyhost=true&application=common-gis-web&cache=lru&check=false&default.accesslog=true&default.check=false&default.retries=0&default.timeout=30000&default.token=true&dubbo=2.8.4&generic=false&interface=cn.com.scooper.core.dsapi.service.system.IAuthService&logger=slf4j&methods=getPmPermByProKey,logout,loginTo,heartbeat,getAccountStatus,login&pid=6776®ister.ip=192.168.105.129&remote.timestamp=1512474168503&revision=1.4.2.0&side=consumer×tamp=1512474231192&token=false, cause: message can not send, because channel is closed . url:dubbo://173.173.173.173:20880/cn.com.scooper.core.dsapi.service.contacts.IOrgMemberService?anyhost=true&application=common-gis-web&cache=lru&check=false&codec=dubbo&default.accesslog=true&default.check=false&default.retries=0&default.timeout=30000&default.token=true&dubbo=2.8.4&generic=false&heartbeat=60000&interface=cn.com.scooper.core.dsapi.service.contacts.IOrgMemberService&logger=slf4j&methods=updateOrgMember,deleteOrgMember,insertOrgMember,queryOrgMember,listOrgMemberByOrgCode,findOrgMemberPath,findAccountByOrgMemberId,queryOrgMemberByDispArgs,getOrgMemberByParams,listOrgMember,changeOrgMemberSortIndex,listOrgMemberByFax,findOrgMemberByTel,listOrgMemTypeList&pid=6776®ister.ip=192.168.105.129&remote.timestamp=1512474169196&revision=1.4.2.0&side=consumer×tamp=1512474206259&token=false com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method login in the service cn.com.scooper.core.dsapi.service.system.IAuthService. Tried 1 times of the providers [173.173.173.173:20880] (1/1) from the registry 192.168.101.9:6379 on the consumer 192.168.105.129 using the dubbo version 2.5.7. Last error is: Failed to invoke remote method: login, provider: dubbo://173.173.173.173:20880/cn.com.scooper.core.dsapi.service.system.IAuthService?anyhost=true&application=common-gis-web&cache=lru&check=false&default.accesslog=true&default.check=false&default.retries=0&default.timeout=30000&default.token=true&dubbo=2.8.4&generic=false&interface=cn.com.scooper.core.dsapi.service.system.IAuthService&logger=slf4j&methods=getPmPermByProKey,logout,loginTo,heartbeat,getAccountStatus,login&pid=6776®ister.ip=192.168.105.129&remote.timestamp=1512474168503&revision=1.4.2.0&side=consumer×tamp=1512474231192&token=false, cause: message can not send, because channel is closed . url:dubbo://173.173.173.173:20880/cn.com.scooper.core.dsapi.service.contacts.IOrgMemberService?anyhost=true&application=common-gis-web&cache=lru&check=false&codec=dubbo&default.accesslog=true&default.check=false&default.retries=0&default.timeout=30000&default.token=true&dubbo=2.8.4&generic=false&heartbeat=60000&interface=cn.com.scooper.core.dsapi.service.contacts.IOrgMemberService&logger=slf4j&methods=updateOrgMember,deleteOrgMember,insertOrgMember,queryOrgMember,listOrgMemberByOrgCode,findOrgMemberPath,findAccountByOrgMemberId,queryOrgMemberByDispArgs,getOrgMemberByParams,listOrgMember,changeOrgMemberSortIndex,listOrgMemberByFax,findOrgMemberByTel,listOrgMemTypeList&pid=6776®ister.ip=192.168.105.129&remote.timestamp=1512474169196&revision=1.4.2.0&side=consumer×tamp=1512474206259&token=false at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:101) at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:229) at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72) at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52) at com.alibaba.dubbo.common.bytecode.proxy1.login(proxy1.java) at cn.com.scooper.cmgis.web.service.auth.LoginServiceImpl.login(LoginServiceImpl.java:76) ... 3.并且发现注册中心中注册的IP地址也是个无法访问的IP地址: 4.查看服务提供方IP配置,发现有虚拟网卡地址: 5.处理方法(两种方法):
|
问题解决 |
该问题可能在如下情况出现:
思路是:Dubbo在注册中心注册时会填充当前主机的IP地址(调用方根据该地址来与服务提供方进行通信);当有多个地址时,Dubbo只能选其中的一个(通常是第一个非loopback IP);所以,只要能够让 Dubbo 能够找到正确的IP就可以了。
Dubbo对本机IP的搜索逻辑是:
|