程序访问RMI接口的异常处理

今天单位平台迁移,安装好的activemq服务,开启了rmi,但是程序在局域网访问rmi的1099端口时总是报错:
    打印:service:jmx:rmi://192.168.0.200:1099/jndi/rmi://192.168.0.200:1099/jmxrmi
    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
这个问题以前遇到过很多次,只要把/etc/hosts里面的内网ip跟服务器名关联起来就可以了。
于是修改了hosts,如下:
    192.168.0.200    mq-0001
    127.0.0.1    localhost    localhost
但是启动程序读取rmi的之后还是报错。经过几次尝试发现,activemq启动时会读hosts文件,所以必须先修改好hosts文件,再启动activemq,程序访问rmi接口才正常。
以为这样就可以了,没想到真正的考验才刚开始。
用reboot重启服务器之后,启动activeme,发现程序又不能访问rmi了。赶紧看了一下hosts,尽然被篡改了。再后给127.0.0.1也对应了服务器名:
    192.168.0.200    mq-0001
    127.0.0.1    localhost    localhost
    127.0.0.1    mq-0001
这样activemq在启动时只会加载127.0.0.1,所以程序就访问不到rmi了。
为什么重启服务器后,hosts会加上这句呢?

先查了一下,有人说是NetworkManager服务修改的,只要把服务关掉就可以了。我尝试了一下,没想到这是个大坑。执行:
     #停止Network Manager服务
    【千万不要执行】systemctl stop NetworkManager
     #关闭Network Manager开机启动
    【千万不要执行】systemctl disable NetworkManager
结果重启服务器的时候报错:
    Failed to start LSB: @app.long.name@.
    See 'systemctl status cloudResetPwdAgent.service' for details.
远程连上服务器再打开NetworkManager,也不能通过网络访问了。这可太吓人了,线上平台呀,断5分钟就是大事故了。此时已经是凌晨,没心思再研究了。
所幸服务器上只有个activemq服务,果断重做系统,3分钟恢复服务。
这么一吓,倒是清醒了不少。百度了一下,看有人在阿里云问过resolv.conf重启后还原的问题,感觉跟我的情况差不多,仔细往下一看,原来云服务商会在/etc/cloud/有个配置文件cloud.cfg来保存一些配置。
赶紧在服务器上打开看了一下,其中注释说的很清楚“The modules that run in the 'init' stage”。在初始化阶段运行的模块。
cloud_init_modules里面就有update_etc_hosts这项。赶紧删除掉这行,重启后果然hosts没遇再被改变。
问题解决,已经是中关村时间凌晨4点。腰酸背痛,真是老了……

猜你喜欢

转载自blog.csdn.net/ziele_008/article/details/105649274