java.rmi.ConnectException: Connection refused to host: 127.0.0.1
主要根源是spring实现中,server端使用了主机名,linux在解析主机名时使用了与windows不同的逻辑。
在使用主机名时有两种说法
说法一:在server端返回的绑定对象中采用的是server主机名,
写一个rmi客户端程序,你可能会收到如标题这样的异常。这个问题其实是由rmi服务器端程序造成的。
客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续
操作根据这个hostname来连接服务器端。要想知道这个hostname具体是什么值可以在服务器端bash中打入
指令:
hostname -i
如果返回的是127.0.0.1,那么你的客户端肯定会抛如标题的异常了。
解决这个问题有两个方式:
1 修改/etc/hosts
找到127.0.0.1 hostxxxxx这样的字样。把127.0.0.1改成真实的,可供其他机器连接的ip。
这样客户端就能得到真实的ip了。
2 在rmi服务器端程序启动脚本中加上两行,显式指定hostname。我的脚本:
hostname=`hostname`
java -cp $CLASSPATH -Djava.rmi.server.codebase=$codebase -
Djava.security.policy=$PROJECT_HOME/se_server/conf/se_server.policy -
Djava.rmi.server.hostname=$hostname com.abc.server.StartServer >
$PROJECT_HOME/se_server/logs/init.log 2>&1 &
不过该方式有个局限,其他机器肯定能识别ip,但是可能无法识别hostname。
当然,你也可以直接写死这个hostname,比如:-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx。 这样最
省力,就是少点灵活性.
说法二:返回的是根据主机名对应的ip
inux系统使用/etc/hosts文件中localhost解析ip为127.0.0.1,当客户端向服务器Lookup时,服务端就会把
解析出来的地址发给客户端,让客户端再根据这个地址去连接,客户端收到127.0.0.1这个地址,也使
用/etc/hosts文件中localhost解析ip去连接,实际连接的是自己本身,当然也就不行了。
我把服务器的IP地址加到服务器的/etc/hosts文件中,并放在127.0.0.1之前,以让该服务能先解析到这个
IP,从而正确解析出来机器名所对应的IP。
举例:
在服务端的 Naming.rebind("SectionWorkerManager", manager );没有指定ip,(这个语句在Windows下没
问题)linux系统自己使用localhost
解析为IP 127.0.0.1,当客户端向服务器Lookup时,服务端就会把解析出来的地址发给客户端,让客户端再
根据这个地址去
连接,客户端收到127.0.0.1这个地址去连接,实际连接的是自己本身,当然也就不行了。
更正办法:把Naming.rebind("SectionWorkerManager", manager);
改成Naming.rebind("rmi://10.1.5.xxx:1099/SectionWorkerManager", manager);,直接用IP地址
(10.1.5.xxx:1099为服务器本身IP),这样就没问题了;
或者是用机器名,该服务器的名字为RHELTEST,把它加到服务器的hosts文件中,并放在127.0.0.1之前,
以让该服务能正确解析出来机器
名所对应的IP;要么用域名解析也行,这种方法比较适合大规模场合。
在Windows下能正常工作,在linux下却不行,这可能是操作系统解析localhost为ip时时的机制不一样引起
的。
在redhat es5中测试,应该使用的是方法2.
不过两种方式都能解决该问题,采用哪种方式,根据服务器可做的修改来决定。
spring rmi对此的特别说明:
Note: RMI makes a best-effort attempt to obtain the fully qualified host name. If one cannot
be determined, it will fall back and use the IP address. Depending on your network
configuration, in some cases it will resolve the IP to the loopback address. To ensure that
RMI will use the host name bound to the correct network interface, you should pass the
java.rmi.server.hostname property to the JVM that will export the registry and/or the service
using the "-D" JVM argument. For example: -Djava.rmi.server.hostname=myserver.com
分享到:
相关推荐
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind 这里说的是1099端口被其它进程占用...
5 Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.An error occurred: Cannot start. localhost.localdomain is a loopback address.
在linux上启动jmeter-server报错: ...Server failed to start: java.rmi.RemoteException: Cannot start. localhost is a loopback address. An error occurred: Cannot start. localhost is a loopback address.
net.genady.rmi_2.0.7_Eclipse33<br>rmi plugins for eclipse 3.3.x
严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Error-附件资源
主要介绍了java.util.concurrent.ExecutionException 问题解决方法的相关资料,需要的朋友可以参考下
Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA_OPTS=%CATALINA_OPTS% -Djavax.management.builder.initial= set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management....
Android 中RxPermissions 的使用方法详解 以请求拍照、读取位置权限为例 module的build.gradle: ... compile 'io.reactivex.rxjava2:rxjava:2.0.5' AndroidManifest.xml: <uses android:name=android.permission....
rmi回调实例含代码 rmi回调实例含代码 rmi回调实例含代码
老师给的面试题 解释下面关于J2EE的名词 (1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是:提供一个目录系统,让其它各地的应用程序在...(5)RMI:Remote Method Interface,远程方法调用
Java编程rmi实例,给出远程方法调用技术在java方面的具体例子。
Java安全漫谈 - 04.RMI篇(1)1
2. Copy rmi.jar and lic.jar under the package "crack" to <%eclipse%>\plugins\net.genady.rmi_2.0.2.1 directory; 3. run the file Keygen.class to get license(可以用Eclipse运行,这样便于直接拷贝key...
• 通过RMI使用Quartz存在一些问题。 关于Jobs的问题 • 如何能够控制Jobs的实例化。 • 如何避免一个任务在完成后被移(删)除? • 如何避免一个Job被并发激活? • 如何停止一个正在执行的任务? 关于触发器的...
import java.rmi.Remote; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; public abstract class BaseDao implements Remote { // 数据库驱动名称 private static ...
企业可再生能源采购在中国的市场现状(RMI).pdf 全球清洁能源开发与投资研究成果发布.pdf 全球电力行业回顾2020.pdf 关于推进电力源网荷储一体化和多能互补发展的指导意见2021-2-25.pdf 关于电力市场过渡路径设计的...
做为java分布式计算的基础框架的RMI体系,是javaEE结构的基础技术. 本课件全面讲解了RMI的一般实现,特殊问题解决及与sping的组合应用. 1.分布式计算的起因及基本原理 2.RMI体系结构 3.RMI服务器实现及编码 4.RMI...
J2SE应用RMI and RMI-IIOP设计代码J2SE RMI and RMI-IIOP application of the design code