RMI 调用问题

96
Minato666
2018.11.22 23:34 字数 498

最近迁移网络的时候碰到了一个奇怪的问题,服务器迁移到了新的网络导致IP发生变化(IP 2.2.2.2->1.1.1.1),于是在修改了服务器上的ActiveMq的配置文件中IP改成了新的1.1.1.1,然后启动了ActiveMq,这个时候activeMq的管理端口是8891是基于RMI协议的。然后在客户端将配置的activeMq的IP修改成新的IP:1.1.1.1,重启了客户端,但是不幸的是客户端报错了,报错信息为:java.rmi.ConnectException: Connection refused to host: 2.2.2.2。 当时被这个问题困扰了很久,不明白为什么客户端配的是新的IP:1.1.1.1,但是报错信息中却去连接到老的IP:2.2.2.2。后来去了解了一下RMI协议才知道原因。其实是由RMI服务器端程序造成的。客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个hostname来连接服务器端。然后我再服务器端通过命令:hostname -i 查看了hostname的值,果然是老的IP,2.2.2.2, 这样就明白了整个问题的根本,linux上配置hostname和IP的对应关系的文件是/etc/hosts,所以就去查看了一下这个文件,果然配置老的IP,于是将其中的配置修改成新的IP并重启activeMq之后,客户端就能成功连接到8891端口。所以对于一些使用了RMI的程序,如果在IP发生变化之后,一定要检查一下/etc/hosts中是否配置了老的IP,不然可能会导致客户端无法连接错误。

日记本
Gupao