RPC之Jersey服务调用处理(一)
1、定义:
远程过程调用, 也叫远程函数调用, 最早出现在Sun公司和HP公司的运行Unix操作系统的计算机中,用于系统间通信的一种机制.
RPC的基本通信模型是基于Client/Server进程间相互通信模型的一种同步通信形式;它对Client提供了远程服务的过程抽象,其底层消息传递操作对Client是透明的。在RPC中,Client即是请求服务的调用者(Caller),而Server则是执行Client的请求而被调用的程序 (Called)
2、协议及其用途:
RPC是一种大而泛的远程调用机制,不局限于语言,更不局限于协议。我们可以认为RMI就是一种RPC,其区别在于RMI是基于对象的,本地虚拟机中通过Stub可以调用远程虚拟机的对象。
不过从传输的数据格式来说,RPC可以分为基于二进制的RPC、基于XML的RPC、以及其他诸如基于Json的RPC。
它可以作为web服务的一种实现方式,Web服务可以从多层架构的关注点分离中受益。业务逻辑和数据可以由自动客户端和 GUI 客户端共享。惟一的不同点在于客户端的本质和中间层的表示层。此外,从数据访问中分离业务逻辑可实现数据库独立性,并为各种类型的数据存储提供插件能力.
3、三种请求传输模式:
(1)同步请求-响应(Synchronous Request-Response):客户端调用远程程序并阻塞,直到它收到一个返回值或异常。
(2)单向 RPC(One-Way RPC):客户端调用远程过程,但自身不阻塞或等待直到收到一个返回值。JAX-RPC 客户端的运行时系统可能会抛出异常。
(3)非阻塞 RPC 调用(Non-Blocking RPC Invocation):客户端调用远程过程,并继续处理同一个线程的内容而不等待返回值。此后,客户端通过阻塞来接受返回值或轮询返回值,以此来处理远程方法的返回。
4、应用场景:
例如,在线电子商务分类网站为用户提供一个浏览器界面,用于搜索、查看和订购产品。如果还提供 Web 服务供公司、零售商甚至个人能够自动订购产品,它将非常有用。可以将其看作是构件设计思想的一种实践,也可以看作的是组件化设计的一种web实现方式。
5、现有的框架技术:
现有的实现框架包括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。
其它相关框架的资料请自行搜集。
6、具体框架的使用(jersey使用)
jersey支持通用的RPC请求类型,包括GET、POST等;请求参数的类型可以进行设置,包括application/xml、application/json等常见的数据类型具体可参见MediaType枚举类型中的类型;
1)、具体的一个get请求可以使用下面的方式进行处理:
@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请求可以使用下面的方式进行处理:
@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"
这样可以成功的调用远程请求返回值情况。
RPC之Jersey服务调用处理(一)的更多相关文章
- 【原创】自己动手实现RPC服务调用框架
自己动手实现rpc服务调用框架 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者).battercake- ...
- 自己动手实现RPC服务调用框架
转自:http://www.cnblogs.com/rjzheng/p/8971629.html#3977269 担心后面忘了,先转了,后面借鉴实现一下RPC -------------------- ...
- 8.rabbitmq RPC模拟微服务架构中的服务调用
标题 : 8.rabbitmq RPC模拟微服务架构中的服务调用 目录 : RabbitMQ 序号 : 8 { var connectionFactory = new ConnectionFactor ...
- 调用链系列二、Zipkin 和 Brave 实现(springmvc、RestTemplate)服务调用跟踪
Brave介绍 1.Brave简介 Brave 是用来装备 Java 程序的类库,提供了面向标准Servlet.Spring MVC.Http Client.JAX RS.Jersey.Resteas ...
- 谈谈RPC中的异步调用设计
RPC(远过程调用)在分布式系统中是很常用的基础通讯手段,核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处 ...
- WCF 服务调用 QueryRun
通过AX2012的WCF服务调用AX2012的方法时,如果方法里调用了QueryRun对象时,会报错,报错信息如下:System.ServiceModel.FaultException: 无法将类型为 ...
- WebService服务调用方法介绍
1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 ...
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- 【Dubbo 源码解析】06_Dubbo 服务调用
Dubbo 服务调用 根据上图,可以看出,服务调用过程为: Consumer 端的 Proxy 调用 Cluster 层选择集群中的某一个 Invoker(负载均衡) Invoker 最终会调用 Pr ...
随机推荐
- P2245 星际导航
题目描述 sideman 做好了回到 Gliese星球的硬件准备,但是 sideman 的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有 N 个顶点和 M 条边的带权无向图,顶点表示 ...
- crontab定时执行
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
- selenium+python unittest实践过程之问题杂集
1.列表选择项后直接获取文本内容获取不到,应该获取选择后显示的button的值 2.取值后的值带有空格,可以使用.strip()删除前后空格,以便断言 3.取值后有些值需要对类型进行转换才能断言成功 ...
- 【转】Spring Boot干货系列:(六)静态资源和拦截器处理
前言 本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter. 正文 前面章节我们也有简单介绍过SpringBoot中对静态资源的默认支持 ...
- 删除iptables nat 规则
删除FORWARD 规则: iptables -nL FORWARD --line-numberiptables -D FORWARD 1 删除一条nat 规则 删除SNAT规则 iptables ...
- 非const引用参数传入不同类型编译不过的理解(拒绝将临时对象绑定为非const的引用的形参是有道理的)
int f (int & I) { cout<<I<<std::endl; } void main() { long L; f(L); // 编译不过 f((int)L ...
- 【LeetCode2】Add Two Numbers★★
题目描述: 解题思路: 给定两个链表(代表两个非负数),数字的各位以倒序存储,将两个代表数字的链表想加获得一个新的链表(代表两数之和). 如(2->4->3)(342) + (5-> ...
- oracle 判断字段相等,但类型不同引起的性能问题
最近做ogg数据同步,然后触发器加工数据放入另外一张表,由于数据量很大,一分钟几万条数据,由于一些条件字段类型不匹配,引起ogg阻塞,比较头大.最后分析发现性能问题.请看下图: phmxxh是varc ...
- #leetcode刷题之路38-报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" (&quo ...
- jQuery----奇偶选择器和索引选择器
奇偶选择器: $( " #uu>li:odd").css( " backgroundColor "," red " ); 获取id为u ...