java远程调用中的RMI构建远程服务

在程序设计中,我们经常会遇到多进程交互,多进程协同工作,分布式任务处理等这样的场景,在这些场景中我们都会涉及到远程通信与远程调用,下面我们用java提供的rmi远程调用来构建一个远程服务

一、RMI用法
java语言提供了一种很简便的远程调用,就是RMI,下面我们来看一下RMI的用法
首先,我们定义一个接口

/**
 * 这个接口必须继承自java.rmi.Remote
 */
public interface IRmiService extends Remote {
   
    /**
     * 接口方法需要抛出RemoteException异常
     */
    public String getName() throws RemoteException;
}
其次,我们定义接口的实现
/**
 * 接口的实现类必须继承自java.rmi.server.UnicastRemoteObject
 */
public class RmiServiceImpl extends UnicastRemoteObject implements IRmiService {
   
    private static final long serialVersionUID = 1L;
    public RmiServiceImpl() throws RemoteException {
        super();
    }
    @Override
    public String getName(){
        System.out.println("service ");
        return getClass().getName();
    }
}
最后,我们分别写服务端服务监听和客户端请求的代码
服务端:
//监听端口
int port = 20010;
LocateRegistry.createRegistry(port);

//定义接口服务的具体实例对象
IRmiService rmiService = new RmiServiceImpl();

//服务名称,绑定服务
String serviceName = "rmi://127.0.0.1:" + port + "/IRmiService";
Naming.bind(serviceName, rmiService);
System.out.println("server listening ...");
客户端:
int port = 20010;
//服务名称
String serviceName = "rmi://127.0.0.1:" + port + "/IRmiService";
IRmiService rmiService = (IRmiService)Naming.lookup(serviceName);
String name = rmiService.getName();
System.out.println("name is " + name);
先运行服务端一直在运行中,并且输出为:
server listening ...
再运行客户端,客户端输出为:
name is com.java.RmiServiceImpl
同时服务端也有输出:
server listening ...
service 

二、反射调用
java提供了反射技术,利用反射技术,我们能够在预先不知道具体对象以及具体函数的时候,先写上一些通用的调用代码,然后在运行时动态决定具体调用某个对象的某个函数
首先,我们定义一个通用调用类

/**
 * 通用的调用池子,只要注册类的实现,就可以动态控制调用了
 */
public class CommonInvoke {
   
    /**
     * 存放接口(类)与具体实现的对应关系
     */
    private Map<Class<?>, Object> map = new HashMap<Class<?>, Object>();
    /**
     * 注册实现
     */
    public<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值