关于RMI服务简易生成方案

这两天想看下分布式。分布式首先要用到java的RMI服务。所以先开始自己部署个RMI服务来体验一下。跌跌撞撞...总算是搞出来了。

先把代码要调用的代码贴出来4个类

IMyRMIService、MyRMIService、Server、Client。

IMyRMIService接口:

package org.yohoph.rmis;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IMyRMIService extends Remote{
	
	public void sayHello() throws RemoteException;

}
MyRMIService类:

package org.yohoph.rmis;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class MyRMIService extends UnicastRemoteObject implements IMyRMIService{

	/**
	 * 
	 */
	private static final long serialVersionUID = 13265462254L;

	public MyRMIService() throws RemoteException {
		super();
	}
	
	public void sayHello() throws RemoteException{
		System.out.println("Hello!");
	}
	
}

Server类(服务端发布)

package org.yohoph.rmis;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class Server {
	
	public Server(){
		try {
			IMyRMIService service = new MyRMIService();
			Naming.rebind("rmi://localhost:1099/MyRMIService", service);
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Server();
	}

}

Client类(客户端):

package org.yohoph.rmis;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class Client {

	public static void main(String[] args) {
		try {
			IMyRMIService service = (IMyRMIService) Naming.lookup("rmi://localhost:1099/MyRMIService");
			service.sayHello();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

注意:JDK默认是已经安装了的。

先将代码编译完毕之后,打开命令行,进入工程目录下(也就是class文件生成的目录以此为根目录,以下所有的命令得在根目录下执行):

服务端执行:

1.注册并打开RMI服务——  键入命令: rmiregistry

2.打开服务端—— 键入命令: java -Djava.security.policy=policy.txt org.yohoph.rmis.Server

客户端执行:

1.生成_Stub的类文件:rmic org.yohoph.rmis.MyRMIService。stub.class文件是放在客户端中用的,服务端貌似不用这个文件。

2..执行客户端内容。即可看到效果。

总结一下:

服务端代码核心就是

Naming.rebind("rmi://localhost:1099/MyRMIService", service);

我简单看了下源码,第一个参数的name属性类似于网络中的ID,客户端调用的时候就是用的这个ID,也可以不用url,而改用任意的其他参数名称。但是我估计这样在跨主机访问的时候,可能会出点问题,建议采用URL的格式来设定Name值。当这个Name是URL的时候,那么他就是个正常的服务。如果是换不同主机访问的话如果更新URL的值,将localhost改成服务端主机的地址即可。再则端口号,好像也有限制,我没有详细看资料,如果有人知道的也可以帮忙补充下,最少已经使用过了的端口是不能提供出去的。不然就会报连接异常。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值