一段时间以来,我一直在尝试让一个javarmi应用程序在docker中作为测试使用。
当两个组件都在同一台pc上时,当“服务器”不在docker中时,应用程序工作。
如何执行已停靠的远程方法?
我的客户有一个片段:
Registry registry = LocateRegistry.getRegistry(DOCKER_EXPOSED_PORT);
// this prints any found registry names
String[] s = registry.list();
System.out.println(s[0]);
CommonInterface stub = (CommonInterface) registry.lookup("RegisteredStub");
int response = stub.CommonMethod();
以及我的“服务器”:
CommonInterface stub = (CommonInterface) UnicastRemoteObject.exportObject(obj, 2000);
LocateRegistry.createRegistry(2000);
Registry registry = LocateRegistry.getRegistry(2000);
registry.bind("RegisteredStub", stub);
我也使用 System.out.println(Inet4Address.getLocalHost().getHostAddress());
为了获得这两个组件的ip地址,它们在本地运行时是相同的,但是在docker中的服务器按预期运行时是不同的。
我的客户能够从docker容器中“读取”已注册的存根,因此如果我将其重命名为 RegisteredStub2
然后
String[] s = registry.list();
System.out.println(s[0]);
印刷品 RegisteredStub2
因此,不知何故,我的客户端可以看到docker中的注册表,但无法访问远程方法。
客户端崩溃:java.net.connectexception:连接超时:connect java.rmi.connectexception:连接拒绝主机:docker ip;
当我调用远程方法时 int response = stub.CommonMethod();
从桌面客户端。
以下是我的docker文件命令:
EXPOSE 2000
CMD ["./rmiregistry 2000"]
CMD ["./rmid -J-Djava.security.policy=rmid.policy -port 2000"]
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!