与 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。
我希望这可以帮助处于相同情况的人(已经看到几个相同问题的问题但没有回复)。
祝你有愉快的一天!
我知道这是重复的事情,但找不到解决我问题的方法...
我正在尝试实现一个模拟的分布式系统,但我在通过 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。
我希望这可以帮助处于相同情况的人(已经看到几个相同问题的问题但没有回复)。
祝你有愉快的一天!