Spring发布JAVA最初的远程调用技术---RMI

Spring发布JAVA最初的远程调用技术—RMI

1.在Spring中配置RMI服务
我们创建的RMI服务需要发布SpritterService接口中的方法,如下展示了该接口的定义

//定义一个需要被远程调用的接口
public interface SpitterService{
    List<Spittel> getRecentSpitter(int count);
    List<Spittel> getAllSpitter(int count);
    void deleteSpitter(long id);
    ......其他方法
}

RmiServiceExporter 可以把任意Spring管理的bean发布为RMI服务。
在使用RmiServiceExporter将SpitterServiceImpl发布为RMI最简单的方式是在Spring中使用下面的方式

//将SpitterService发布为RMI远程调用接口
@Bean
public RmiServiceExporter rmiExporter (SpitterService spitterService){
RmiServiceExporter  rmiExporter  = new RmiServiceExporter ();
rmiExporter.setService(spitterService);
rmiExporter.setServiceName("spitterService");
rmiExporter.setServiceInterface(SpitterService.class );
rmiExporter.setServiceHost("rmi.spitter.com" );//设置网络服务主机地址
rmiExporter.setServicePort(1199 );//设置端口号
return   rmiExporter;   
}

这里会把spitterService bean设置到service属性中,表明RmiServiceExporter要把该bean发布为一个RMI服务。setServiceName属性命名RMI服务,setServiceInterface属性指定此服务所实现的接口。
默认情况下RmiServiceExporter会尝试绑定到本地机器的1099端口,即localhost:1099 。如果希望绑定到不同端口或者主机上,可以通过setServiceHost 设置主机和setServicePort设置端口号。
以上我们就将spitterService已经导出为RMI服务。下面让我们看一下该如何编写spitterService RMI的客户端。

2.客户端装配RMI服务
使用SpringRmiProxyFactroyBean引用spitterService的RMI服务是非常简单的,只要在客户端的Spring配置中增加如下的方法:

@Bean
public RmiProxyFactoryBean spitterService(){
    RmiProxyFactoryBean rmiProxy = new RmiProxyFactoryBean();
    rmiProxy .setServiceUrl("rmi://localhost/SpritterService");
    rmiExporter.setServiceInterface(SpitterService.class );
    return  rmiProxy ;
}

现在我们就可以把spitterService作为客户端本地的bean一样进行管理。可以把它作为依赖装配进另外的bean中。例如客户端需要使用spitterService为指定用户获取Spitter列表,我们可以使用@Autowired注解把服务装配到客户端中。

@Autowired //自动装配bean
SpritterService spritterService;
//我们可以像本地bean调用它
public List<Spittle> getSpittles(String userName){
    Spitter spitter = spritterService.getSpitter(userName); 
    return spritterService.getSprittlesForSpitter(spitter);
}

至此我们就把Spring中使用RMI–java远程接口调用完成了。共有三部

1. 开发需要远程调用的接口;
2.服务端使用RmiServiceExporter把需要被远程调用的接口发布;
3.客户端使用RmiProxyFactoryBean接收调用的远程接口;
4.客户端像在本地生成的bean一样调用远程接口。

注意事项:
1,RMI可以实现远程服务交互,但是存在限制。首先RMI很难穿越防火墙。
2,RMI是基于java的。所以服务端和客户端必须是用java开发的。
3,java的版本必须保持一致。

拓展:Caucho Technology 开发了一套应对RMI的远程调用方案。在下面的博客中我们将观察Spring如何使用其他方案解决RMI的限制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值