与 Amazon EC2 的奇怪 RMI 连接异常

Strange RMI connection exception with Amazon EC2

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

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

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

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

LocateRegistry.createRegistry(1099);

然后组件将通过

发现自己
Naming.lookup(url)

现在,用户将查找 ip 地址 A.A.A。A/component Amazon 实例的 public 地址。我可以检查它有时是否获得了引用,有时却没有(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

到亚马逊实例中的 public ip A.A.A.A,我得到了相同的结果。我也尝试在我的笔记本电脑上对 public 地址 B.B.B.B 做同样的事情,我得到了 "connection refused IP B.B.B.B is not a localhost address"

我也打开了我家路由器的端口,以防万一这是问题,但似乎不是...

我是不是漏掉了什么?

提前致谢。

显然,问题是即使服务器侦听端口 1099,您用来连接存根的端口也是随机的,所以我不得不打开 AWS 安全组中的所有 TCP 端口。这样它就可以正常工作,但是即使我关闭 windows 防火墙并打开路由器中的所有端口,它也无法在我的笔记本电脑 - AWS 上运行,只是 AWS 中的不同实例。但是好吧,我可以忍受...

关于主机名,您必须将其设置为

返回的私有地址
hostname -i

如果您要将其部署在 AWS 内部或部署到 public IP,如果您要连接不同的实例,例如您的笔记本电脑和一个 EC2。

我希望这可以帮助处于相同情况的人(已经看到几个相同问题的问题但没有回复)。

祝你有愉快的一天!