spring实现远程方法调用

spring in action一书的读书笔记

使用spring实现远程方法调用可以极大简化开发

将一个spring bean包装成为RMI service

[java] 
view plain
copy

  1. <bean class="org.springframework.remoting.rmi.RmiServiceExporter"
  2. p:service-ref="spitterService"
  3. p:serviceName="SpitterService"
  4. p:serviceInterface="com.habuma.spitter.service.SpitterService"
  5. p:registryHost="rmi.spitter.com"
  6. p:registryPort="1199"/>

调用发布的RMI service

[java] 
view plain
copy

  1. String serviceUrl = "rmi:/spitter/SpitterService";
  2. SpitterService spitterService = (SpitterService)Naming.lookup(serviceUrl);

我们也可以使用spring进行配置

[html] 
view plain
copy

  1. <bean id="spitterService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean" p:serviceUrl="rmi://localhost/SpitterService"
  2. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

RMI有一个限制就是对防火墙不太友好,不容易穿过防火墙,这在局域网可以不用考虑,但是广域网就需要考虑这一点

Hessian,Burlap是Caucho科技提供的两种方法

Hessian基于二进制消息进行通信

Burlap基于xml格式消息进行通信

发布Hessian service

[html] 
view plain
copy

  1. <bean id="hessianSpitterService" class="org.springframework.remoting.caucho.HessianServiceExporter"
  2. p:service-ref="spitterService"
  3. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

[html] 
view plain
copy

  1. HessianServiceExporter在spring中是作为一个controller存在的,所以需要在web.xml(意味着必须是web项目)配置DispatcherServlet,将对Hessian service bean的请求映射到hessianSpitterService
  2. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  3. <property name="mappings">
  4. <value>
  5. /spitter.service=hessianSpitterService
  6. </value>
  7. </property>
  8. </bean>

调用发布的Hessian service

[html] 
view plain
copy

  1. <bean id="spitterService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"
  2. p:serviceUrl="http://localhost:8080/Spitter/spitter.service"
  3. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

发布Burlap service

[html] 
view plain
copy

  1. <bean id="burlapSpitterService" class="org.springframework.remoting.caucho.BurlapServiceExporter"
  2. p:service-ref="spitterService"
  3. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

调用 Burlap service

[html] 
view plain
copy

  1. <bean id="spitterService" class="org.springframework.remoting.caucho.BurlapProxyFactoryBean"
  2. p:serviceUrl="http://localhost:8080/Spitter/spitter.service"
  3. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

RMI使用jdk中的类库,但是对防火墙不太友好,burlap和hessian对防火墙友好但是使用了第三方的类库,Spring‘s HttpInvoker解决了这两个矛盾。使用spring‘s httpInvoker双发必须都是用spring

[html] 
view plain
copy

  1. <bean class="org.spring.framework.remoting.httpinvoker.HttpInvokerServiceExporter"
  2. p:service-ref="spitterService"
  3. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>
  4. HttpInvokerServiceExporter在spring中也是作为一个controller
  5. 调用HttpInvoker service
  6. <bean id="spitterService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"
  7. p:serviceUrl="http://localhost:8080/Spitter/spitter.service"
  8. p:serviceInterface="com.habuma.spitter.service.SpitterService"/>

几种方式使用方法大体相同,只是使用的spring中的类不同

时间: 2024-10-07 11:03:15

spring实现远程方法调用的相关文章

spring整合RMI - Java远程方法调用

一. 开篇语 在上一篇RMI - Java远程方法调用博文中使用的是JDK原生类进行远程方法调用, 本篇文章使用spring提供的API对RMI进行整合, 希望能给您带来帮助. 二. 核心API 1. 客户端: 客户端的核心是RmiProxyFactoryBean, 它包含两个属性serviceUrl(远程调用地址), serviceInterface(远程调用接口) 2. 服务端: RmiServiceExporter把spring管理的Bean输出成一个RMI服务, 通过把Bean包装在一个

XML-RPC远程方法调用

一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现. 这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式. Xml-Rpc的定义尽可能的保持了简单,但同时能够传送.处理.返回复杂的数据结构. xml rpc使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据. 一个rpc系统,必然包括2个部分: 1

RMI - Java远程方法调用

一.入门篇 Java RMI指的是远程方法调用(Remote Method Invocation). 它是一种机制, 能够让不同操作系统之间程序实现方法调用. 比如: 一台电脑上的Java程序可以通过RMI调用另一台电脑上的方法(EJB底层就是使用RMI). 二.RMI和webservice RMI是在TCP协议上传递可序列化的Java对象, 只能用在Java虚拟机上, 客户端和服务端必须都是Java. webservice是在http协议上传递xml文件, 它与语言和平台无关, 可以在异构系统

RMI远程方法调用

RMI远程方法调用:适用于 客户端 调用 服务器 内的方法:(Kotlin 语言编写) 如果业务为二个服务器之间的通信,还是得用消息队列的形式,因为RMI 不适合 双向 调用 下面介绍RMI 的使用方法: 1,服务器端代码: 定义接口(此接口放入服务端和客户端公用的模块 或者打成jar给服务器/客户端使用) 1 interface RmiService { 2 3 /** 4 * 订单发货 5 * @param saleItemId BTB订单项 itemId 6 * @param shipme

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

转载:RMI 远程方法调用

Java 分布式处理技术 1.1 RMI 的基本概念 1.1.1 什么是RMI RMI(Remote Method Invocation) 远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样. 1.1.2 RMI 的用途 1. 分布式体系结构 我们为什么要使用分布式计算呢? ?         当我们想与多个用户或客户机共享一个中央资源(如一个数据

Java RMI远程方法调用

参考: 利用java-RMI进行大文件传输 RMI远程方法调用的简单方法和实例 RMI是类似RPC的一种远程方法调用协议,比RPC类型的WebService更简单,也可以跨进程访问 先来创建一个model或者javaBean,注意,该类必须实现序列化Serializable  public class Person implements Serializable {     private int id;     private String name;     private int age;

Spring框架实现——远程方法调用RMI代码演示

1.spring_RMI02_server服务端02 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="

Spring事务内方法调用自身事务 增强的三种方式

ServiceA.java文件: 查看Spring Tx的相关日志:  可以看到只创建了一个事物ServiceA.service方法的事务,但是callSelf方法却没有被事务增强; 分析原因:Spring事务生成的对象也是被Cglib或JDK代理的对象,就区别于该对象本身了, 代理的对象执行方法之前会走拦截器链,就不能同this方法. 解决方案: 使用Autowired注解将自身注入,然后调用注入属性的方法; 验证输出结果:  确实初始化了callSelf的事务; 2.之前Aop可以将代理对象