`
pangyi
  • 浏览: 32802 次
  • 性别: Icon_minigender_1
  • 来自: 古城西安
社区版块
存档分类
最新评论

Java远程通讯可选技术及原理(三)

阅读更多
JMS

  JMS 呢,是实现java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang论文)。

  来看JMS中的一次远程通信的过程:

  1、客户端将请求转化为符合JMS规定的Message;

  2、通过JMS API将Message放入JMS Queue或Topic中;

  3、如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic的JMS Queue。

  4、处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理。

  回答问题:

  1、传输的标准格式是?

  JMS规定的Message。

  2、怎么样将请求转化为传输的流?

  将参数信息放入Message中即可。

  3、怎么接收和处理流?

  轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast。

  4、传输协议是?

  不限。

  基于JMS也是常用的实现远程异步调用的方法之一。

  可选实现技术

  当然,在上面的原理中并没有介绍到所有的java领域可选的远程通信协议了,例如还有EJB采用的ORMI、Spring自己定义的一个简单的Http Invoker等等。

  看完原理后我们再来看看目前java领域可用于实现远程通讯的框架或library,知名的有:JBoss-Remoting、Spring- Remoting、Hessian、Burlap、XFire(Axis)、ActiveMQ、Mina、Mule、EJB3等等,来对每种做个简单的介绍和评价,其实呢,要做分布式服务框架,这些东西都是要有非常深刻的了解的,因为分布式服务框架其实是包含了解决分布式领域以及应用层面领域两方面问题的。

  当然,你也可以自己根据远程网络通信原理(transport protocol+Net IO)去实现自己的通讯框架或library。

  那么在了解这些远程通讯的框架或library时,会带着什么问题去学习呢?

  1、是基于什么协议实现的?

  2、怎么发起请求?

  3、怎么将请求转化为符合协议的格式的?

  4、使用什么传输协议传输?

  5、响应端基于什么机制来接收请求?

  6、怎么将流还原为传输格式的?

  7、处理完毕后怎么回应?

  --------------------------------------------------------------------------------------------------------------------------------------------------

  JBoss-Remoting

  Jboss-remoting是由jboss编写的一个java领域的远程通讯框架,基于此框架,可以很简单的实现基于多种传输协议的java对象的RPC。

  直接来回答问题:

  1、是基于什么协议实现的?

  JBoss-Remoting是个通讯框架,因此它支持多种协议方式的通信,例如纯粹的socket+io方式、rmi方式、http+io方式等。

  2、怎么发起请求?
在JBoss-Remoting中,只需将需要发起的请求参数对象传入jboss-remoting的InvocationRequest对象即可,也可根据协议基于InvocationRequest封装符合需求的InvocationRequest对象。

  3、怎么将请求转化为符合协议的格式的?

  JBoss-Remoting基于Java串行化机制或JBoss自己的串行化实现来将请求转化为对象字节流。

  4、使用什么传输协议传输?

  支持多种传输协议,例如socket、http等。

  5、响应端基于什么机制来接收请求?

  响应端只需将自己的处理对象注册到JBoss-Remoting提供的server端的Connector对象中即可。

  6、怎么将流还原为传输格式的?

  JBoss-Remoting基于java串行化机制或jboss自己的串行化实现来将请求信息还原为java对象。

  7、处理完毕后怎么回应?

  处理完毕后将结果对象直接返回即可,jboss-remoting会将此对象按照协议进行序列化,返回至调用端。

  另外,jboss-remoting支持多种通信方式,例如同步/异步/单向通信等。

  --------------------------------------------------------------------------------------------------------------------------------------------------
Spring-Remoting

  Spring-remoting是Spring提供java领域的远程通讯框架,基于此框架,同样也可以很简单的将普通的spring bean以某种远程协议的方式来发布,同样也可以配置spring bean为远程调用的bean。

  1、是基于什么协议实现的?

  和JBoss-Remoting一样,作为一个远程通讯的框架,Spring通过集成多种远程通讯的library,从而实现了对多种协议的支持,例如rmi、http+io、xml-rpc、binary-rpc等。

  2、怎么发起请求?

  在Spring中,由于其对于远程调用的bean采用的是proxy实现,发起请求完全是通过服务接口调用的方式。

  3、怎么将请求转化为符合协议的格式的?

  Spring按照协议方式将请求的对象信息转化为流,例如Spring Http Invoker是基于Spring自己定义的一个协议来实现的,传输协议上采用的为http,请求信息是基于java串行化机制转化为流进行传输。

  4、使用什么传输协议传输?

  支持多种传输协议,例如rmi、http等等。

  5、响应端基于什么机制来接收请求?

  响应端遵循协议方式来接收请求,对于使用者而言,则只需通过spring的配置方式将普通的spring bean配置为响应端或者说提供服务端。

  6、怎么将流还原为传输格式的?

  按照协议方式来进行还原。

  7、处理完毕后怎么回应?

  处理完毕后直接返回即可,spring-remoting将根据协议方式来做相应的序列化。

  --------------------------------------------------------------------------------------------------------------------------------------------------
Hessian

  Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library。

  1、是基于什么协议实现的?

  基于Binary-RPC协议实现。

  2、怎么发起请求?

  需通过Hessian本身提供的API来发起请求。

  3、怎么将请求转化为符合协议的格式的?

  Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

  4、使用什么传输协议传输?

  Hessian基于Http协议进行传输。

  5、响应端基于什么机制来接收请求?

  响应端根据Hessian提供的API来接收请求。

  6、怎么将流还原为传输格式的?

  Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

  7、处理完毕后怎么回应?

  处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。
  --------------------------------------------------------------------------------------------------------------------------------------------------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics