Spring远程调用技术1-RMI
在java中,我们有多种可以使用的远程调用技术
1.远程方法调用(remote method invocation, RMI)
适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务
2.Caucho的Hession和Burlap
适用场景:考虑网络限制时,通过http访问/发布基于java的服务。Hession是二进制协议,Burlap是基于XML的
3.Spring基于HTTP的远程服务(HTTP invoke)
适用场景:考虑网络限制,并希望使用基于xml或专有的序列化机制实现java序列化时,访问/发布基于Spring的服务
4.使用JAX-RPC和JAX-WS的Web Server
适用场景:访问/发布平台独立的、基于SOAP的Web服务
5.还有EJB技术
参考http://www.cnblogs.com/wwzyy/p/5655600.html
这里远程方法的调用,方法的执行是在服务端执行的,客户端只是获取服务端处理完返回的结果。
一、首先开始配置服务端,建立java普通项目就行
先导入spring的jar包,这里使用的是spring4.1.1
1.配置远程调用的接口(MyServer.java)
package com.spring.rmiServer;public interface MyServer {public void getMsg();public String getMsgById(Integer id);public Integer add(Integer a, Integer b);}
2.实现类(MyServerImpl.java)
package com.spring.rmiServer;public class MyServerImpl implements MyServer {@Overridepublic void getMsg() {System.out.println("call getMsg..");}@Overridepublic String getMsgById(Integer id) {System.out.println("call getMsgById "+ id);return "id is "+id;}@Overridepublic Integer add(Integer a, Integer b) {System.out.println("call add ");return a+b;}}
3.配置RMI服务(RMIConfig.java),使用java配置的方式
package com.spring.rmiServer;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.remoting.rmi.RmiServiceExporter;@Configuration public class RMIConfig {//@Bean()的name默认是方法名@Bean(name="rmiExporter")public RmiServiceExporter rmiExporter(MyServer myServer){RmiServiceExporter rmiExporter = new RmiServiceExporter();rmiExporter.setService(myServer);rmiExporter.setServiceName("My_server");rmiExporter.setServiceInterface(MyServer.class);//rmiExporter.setRegistryHost("localhost");rmiExporter.setRegistryPort(1199);//远程的端口return rmiExporter;}@Bean(name="myServer")public MyServer myServer(){return new MyServerImpl();} }
4.启动服务
public static void main(String[] args) { //当出现java.net.ConnectException: Connection refused: connect,可以这样解决,指定ip地址 System.setProperty("java.rmi.server.hostname" , "192.168.23.128" );ApplicationContext ac = new AnnotationConfigApplicationContext(com.spring.rmiServer.RMIConfig.class);
System.out.println("start rmi server.."); }
二、配置客户端
1.配置要访问的远程接口,和服务端的那个接口一模一样,实现类不用写,因为服务端已经实现了,客户端调用就行
(MyServer.java)
package com.spring.rmiServer;public interface MyServer {public void getMsg();public String getMsgById(Integer id);public Integer add(Integer a, Integer b);}
2.配置文件 (ClientContext.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="org.springframework.remoting.rmi.RmiProxyFactoryBean"><!-- 要调用的接口 --><property name="serviceInterface" value="com.spring.rmiServer.MyServer"></property><!-- url --><property name="serviceUrl" value="rmi://192.168.23.128:1199/My_server"></property></bean> </beans>
3.启动客户端(Client.java)
public static void main(String[] args) {ApplicationContext app = new ClassPathXmlApplicationContext("com/spring/rmiClient/ClientContext.xml");MyServer myServer = app.getBean(MyServer.class);System.out.println(myServer.getMsgById(03));}
注意:有时候会由于主机ip的原因出现拒绝访问异常
3种解决方法:
1. 服务器端添加代码: System.setProperty("java.rmi.server.hostname" , "192.168.23.128" );上面代码使用的就是这种方法。
2. 在 RMI 服务器上 root 身份登录,输入 Vi /etc/hosts ,在第一行添加 192.168.39.11 ieie
3. 若是用 spring, 则在 RmiServiceExporter 中添加属性 <property name="registryHost" value="192.168.23.128" />
缺点:
但是它存在某种限制,RMI很难穿越防火墙,这是RMI使用任意端口来交互(这是防火墙通常不允许的)。在企业内部网络幻境中,我们通常不需要担心。但如果在互联网运行,可能会有麻烦。
还有就是RMI是基于java的,也就是说客户端和服务端必须都是由java开发,这样接口才能对得上。因为RMI使用了java的序列化机制,所以通过网络传输的对象类型必须要保证在调用两端的java运行中是完全相同的版本
转载于:https://www.cnblogs.com/wwzyy/p/6083090.html
Spring远程调用技术1-RMI相关推荐
- C#远程调用技术WebService葵花宝典
一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...
- C#动态调用web服务 远程调用技术WebService
一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...
- WebService远程调用技术
Web Service--也叫XML Web Service WebService,是一种跨编程语言和跨操作系统平台的远程调用技术. 各个应用程序之间的交流就需要Web Service来作为相互交流的 ...
- Spring远程支持和开发RMI服务
Spring远程支持简化了启用远程服务的开发. 当前,Spring支持以下远程技术:远程方法调用(RMI),HTTP调用程序,Hessian,Burlap,JAX-RPC,JAX-WS和JMS. 远程 ...
- webservice 简介 跨编程语言 跨操作系统 远程调用技术
目录 引子 WebService 特点介绍 WebService 到底是什么? 为什么需要使用 WebService WebService 体系结构 WebService 三种基本元素之 SOAP W ...
- 《Spring技术内幕》学习笔记19——Spring RMI实现远程调用
1.Spring除了使用基于HTTP协议的远程调用方案,还为开发者提供了基于RMI机制的远程调用方法,RMI远程调用网络通信实现是基于TCP/IP协议完成的,而不是通过HTTP协议. 在Spring ...
- Java:RMI远程调用
首先服务器端定义服务接口和实现服务,然后服务器端利用RMI协议将服务发布到一个端口上.等待客户端调用. //定义服务接口,服务接口必须继承java.rmi.Remote,服务方法必须抛出java.rm ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- Java远程调用WebService接口
WebService简介 Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, ...
最新文章
- 单片机练习-RC-5红外遥控器程序及简单制造DIY PC遥控器
- 工程介绍好处费性质_水运工程造价工程师继续教育课件上新丨海外水运工程造价编制介绍课程发布...
- 推荐7款冷门但是非常值得推荐的windows软件
- ORACLE 11g 使用ROWNUM完美解决ORA-00600:内部错误代码
- 我在 Go 圈儿里的几位老朋友
- 《C++ Primer 5th》笔记(5 / 19):语句
- 数据库服务器主机重启故障诊断分析
- 社会内卷的真正原因:华为内部论坛的这篇短文讲透了
- redis客户端分析
- 软件基本功:工作目标经常变化,要及时跟进
- 【合宙GSM模块Air202 烧录iRTU固件连接阿里云】
- 正弦稳态电路的阻抗和功率
- 【其它】颜色的知识--亮度、色相、饱和度、对比度
- 【猿如意】中的『XMind』工具详情介绍
- docker安装minio无法访问
- IE与Firefox火狐的CSS兼容大全
- [kernel exploit] Dirty Cred: 一种新的无地址依赖漏洞利用方案
- 清除浮动的几种常用方法
- 保研边缘人如何自救(经管学姐)?
- linux配置网卡绑定后不生效,Linux双网卡绑定实现负载均衡和失效保护
热门文章
- (3)websocket实现单聊和群聊
- liferay remove Your request completed successfully.
- 事件驱动数据管理 微服务和分布式数据管理问题
- 新手程序员如何让他快速成长?一名老程序员,谈谈对程序员的培养
- 婚纱照嘴巴有点凸好p吗_丑拒80寸奢华大片挂床头,压箱底的婚纱照还能这样摆?...
- sqlmap的使用----进阶
- (转)fatal error C1853: precompiled header file is from a previous version of the compiler, or the pre
- NLTK完成简单的情感分析
- 分类算法之决策树C4.5算法
- 多进程与多线程的区别