AmazonEC2出现奇怪的RMI连接异常



我知道这是重复的事情,但找不到解决我问题的方法。。。

我正在尝试实现一个模拟的分布式系统,我在通过RMI进行连接时遇到了很多困难。

我有三个不同的组件,网格调度器、资源管理器和客户端。他们三个人相互影响。行为如下:用户在注册表中查找资源管理器引用,然后调用一个远程方法,该方法将调用网格调度程序中的另一个方法,最终将调用用户中的一个方法来传递结果。如果我在本地执行整个系统,一切都会按预期进行。

现在的问题是,我正试图将其中一个资源管理器节点移动到具有公共地址a.a.a.a的EC2 Amazon实例,系统的其余部分将在具有公共地址B.B.B.的笔记本电脑上本地运行。我在安全组策略上允许端口1099 TCP/UDP上的TCP通信,还设置了java.security.policy以授予两台机器中的所有权限。要在我所做的每个组件中创建注册表:

LocateRegistry.createRegistry(1099);

然后组件将通过发现自己

Naming.lookup(url)

现在,用户将查找ip地址A.A.A.A/组件,即亚马逊实例的公共地址。我可以检查一下,有时它得到了引用,有时它没有(NotBoundException)。然而,当它得到引用并试图调用我得到的方法时:

java.rmi.ConnectException: Connection refused to host: INTERNAL IP OF AMAZON INSTANCE  nested exception is: java.net.ConnectException: Connection timed out: connec.

我做错什么了吗?我试图设置属性

java.rmi.server.hostname

到公共ip A.A.A.A在亚马逊实例中,我得到了相同的结果。我也试着在我的笔记本电脑上对公共地址B.B.B做同样的操作,结果我得到了"连接被拒绝IP B.B.B.B不是本地主机地址"

我还打开了我的houe路由器中的端口,以防出现问题,但它似乎不是…

我是不是错过了什么?

提前谢谢。

很明显,问题是即使服务器在1099端口上侦听,那么用于连接存根的端口也是随机的,所以我必须打开AWS安全组中的所有TCP端口。这样它就可以工作了,然而,即使我关闭了windows防火墙并打开了路由器中的所有端口,我的笔记本电脑也无法工作——AWS,只是AWS中的不同实例。但是,我可以接受。。。

关于主机名,您必须将其设置为返回的专用地址

hostname -i

如果你要在AWS内部部署它,或者如果你要连接不同的实例,比如你的笔记本电脑和一个EC2,则将其部署到公共IP。

我希望这能帮助到处于相同情况的人(已经看到了几个关于相同问题的问题,但没有得到回应)。

祝你今天愉快!

最新更新