需求,A应用、B应用进行通讯,使用rmi,在本地测试完毕,部署到阿里云服务器。一直报如下错:
java.rmi.ConnectException: Connection refused
...
查找资料后,发现:rmi有两个端口,一个是服务注册端口(默认1099),一个是通讯端口(不指定的话,随机分配)
解决方案:
在rmi服务端新增SMRMISocket 类
public class SMRMISocket extends RMISocketFactory {
public Socket createSocket(String host, int port)
throws IOException{
return new Socket(host,port);
}
public ServerSocket createServerSocket(int port)
throws IOException {
if (port == 0) port = 8080;//不指定就随机
return new ServerSocket(port);
}
}
在rmi服务端new UnicastRemoteObject()之前,新增如下代码
try {
RMISocketFactory.setSocketFactory(new SMRMISocket());
} catch (IOException e) {
e.printStackTrace();
}