RPC之Jersey服务调用处理(一)

一、定义
        远程过程调用, 也叫远程函数调用, 最先出如今Sun公司和HP公司的运行Unix操做系统的计算机中,用于系统间通讯的一种机制.
        RPC的基本通讯模型是基于Client/Server进程间相互通讯模型的一种同步通讯形式;它对Client提供了远程服务的过程抽象,其底层消息传递操做对Client是透明的。在RPC中,Client便是请求服务的调用者(Caller),而Server则是执行Client的请求而被调用的程序 (Called)
二、协议及其用途:
        RPC是一种大而泛的远程调用机制,不局限于语言,更不局限于协议。咱们能够认为RMI就是一种RPC,其区别在于RMI是基于对象的,本地虚拟机中经过Stub能够调用远程虚拟机的对象。
不过从传输的数据格式来讲,RPC能够分为基于二进制的RPC、基于XML的RPC、以及其余诸如基于Json的RPC。
        它能够做为web服务的一种实现方式,Web服务能够从多层架构的关注点分离中受益。业务逻辑和数据能够由自动客户端和 GUI 客户端共享。唯一的不一样点在于客户端的本质和中间层的表示层。此外,从数据访问中分离业务逻辑可实现数据库独立性,并为各类类型的数据存储提供插件能力.
三、三种请求传输模式:
(1)同步请求-响应(Synchronous Request-Response):客户端调用远程程序并阻塞,直到它收到一个返回值或异常。
(2)单向 RPC(One-Way RPC):客户端调用远程过程,但自身不阻塞或等待直到收到一个返回值。JAX-RPC 客户端的运行时系统可能会抛出异常。
(3)非阻塞 RPC 调用(Non-Blocking RPC Invocation):客户端调用远程过程,并继续处理同一个线程的内容而不等待返回值。此后,客户端经过阻塞来接受返回值或轮询返回值,以此来处理远程方法的返回。
四、应用场景:
        例如,在线电子商务分类网站为用户提供一个浏览器界面,用于搜索、查看和订购产品。若是还提供 Web 服务供公司、零售商甚至我的可以自动订购产品,它将很是有用。能够将其看做是构件设计思想的一种实践,也能够看做的是组件化设计的一种web实现方式。
五、现有的框架技术:
        现有的实现框架包括sun公司的jersey、Google的Protocol Buffers、 Facebook的Thrift还有Missian框架等
Missian简介
        Missian是一个构建于Mina和Hessian基础上的异步RPC框架,可以兼容HTTP协议和TCP协议,能和Hessian互通兼容,它提供了:
1)、一个基于mina的高性能服务器,具有mina全部的一切优秀基因。Missian服务器可以在一个端口之上兼容tcp和http协议格式,因 此开启了Missian服务以后,便可以用Missian客户端调用(同步/异步,HTTP/TCP),也能够供Hessian客户端调用。
2)、一个基于阻塞式的传统Socket的同步客户端,一样支持HTTP和TCP,它可使用HTTP或TCP去访问Missian服务,同时也能够 使用HTTP方式去访问Hessian服务。您能够选择使用短链接的方式,也可使用长链接(这时强制要求使用链接池,但Missian提供了一个基于 apache commons-pool的Socket链接池实现)。能够根据具体状况决定使用方式。
3)、一个基于Mina NioSocketConnector的异步客户端。默认使用一个4个线程的线程池来处理回调,但开发者也能够指定线程数,或者传入一个存在的线程池。异 步客户端只能调用Missian服务,而不可以调用Hessian服务(正在思考如何实现)。一样,协议能够是HTTP或者TCP。
其它相关框架的资料请自行搜集。
六、具体框架的使用(jersey使用)
        jersey支持通用的RPC请求类型,包括GET、POST等;请求参数的类型能够进行设置,包括application/xml、application/json等常见的数据类型具体可参见MediaType枚举类型中的类型;
1)、具体的一个get请求可使用下面的方式进行处理:web

@GET
@Path ("age/{name}" )
@Produces ("text/plain" )
@Consumes (MediaType. APPLICATION_JSON)
public String getAge(@PathParam ("name" ) JSONObject name) {
  // 返回数据信息
  return name+"result" ;
}

 

 上述get请求接收的参数类型为json类型,其余类型的参数将没法完成请求;数据库


2)、具体的一个post请求可使用下面的方式进行处理:apache

@POST
@Path ("testjson" )
@Consumes (MediaType. APPLICATION_JSON)
@Produces ({MediaType. APPLICATION_XML, MediaType. APPLICATION_JSON})
public String getTestJson( String str) {
  return str + "success" ;
}

 


上述post请求接收到的参数会自动转换为str这个参数
post请求可使用下面的命令进行验证:
curl -d "{'name':'xiayy'}" -X POST http://10.16.204.31:8080/jerseyRestful/resources/helloworld/testjson -H "Content-Type: application/json"

这样能够成功的调用远程请求返回值状况。
json

相关文章
相关标签/搜索