读书笔记二——第一章《面向服务的体系架构SOA》上

1      基于TCP协议的RPC

1.1    RPC名词解释

RPC全称Remote Process Call,即远程过程调用,实现方式很多,有RMI,WebService 等诸多成熟的方案。

1.2    对象的序列化

无论是何种数据类型的数据,最终都需要转换成二进制流在网络上传输。将对象转换为二进制流的过程称为对象的序列化,将二进制流恢复为对象的过程称为对象的反序列化。常用的方案有Google的Protocal Buffers、java 本身内置的序列化方式、Hessian,以及JSON和XML等。

java 内置序列化实现:


 

Hessian序列化,需要hessian-4.0.7.jar:

 

 

1.3    基于TCP协议实现RPC

基于socket API ,我们能实现一个简单的RPC调用,


服务接口:

 

服务的实现:


服务消费者Consumer类的实现。实际生产环境中处于性能考虑,往往使用非阻塞式IO,以提供更大的吞吐量:


服务提供者Provider的实现:


服务提供端事先将服务实例化后放到services这个MAP中,通过while循环,不断的根据请求调用。

2      基于HTTP协议的RPC

2.1    HTTP协议栈

HTTP是超文本传输协议 HypertextTransfer Protocol 的缩写。它构建于TPC和IP协议之上,它不需要处理下层协议间诸如丢包补发、握手及数据分段和重组等问题。


OutputStream中写入一个int类型,会截取低8位,丢弃高24位,因此需要转换为字节流。


 

2.2    HTTP请求与响应

Web浏览器与Web服务器之间的一次HTTP请求与响应过程,需要完成如下几个步骤。

 

2.3    通过HttpClient发送HTTP请求

HttpClient对HTTP协议通信的过程进行了封装,提供高效且功能丰富的客户端编程工具包。


 

2.4    使用HTTP协议的优势

基于TCP协议的RPC,能够更灵活的对协议字段进行定制,减少网络传输字节数,降低网络开销,提高性能,但是需要更多的关注底层负责的细节,实现代价更高,难以得到平台厂商和开源社区的支持,较难实现跨平台调用。

基于HTTP协议的RPC可以使用JSON和XML格式的响应数据,非常便捷和简单。

基于TCP协议的RPC实现,需要考虑多线程并发、锁、IO等复杂的底层实现,而基于HTPP协议的实现很多WEB容器已经处理好了这些事情,如Tomcat、JBoss、Apache等。

基于HTTP协议的实现,传输内容相同的情况下,效率会比基于TCP协议数据传输低。通过优化代码和使用gzip数据压缩,能够缩小这一差距。

 

2.5    JSON和XML

JSON JavaScript Object Notation 是一种轻量级数据交换语言。

使用jackson-all.jar工具包实现JSON对象的转换:

 

 

XML 可扩展标记语言 ExtensibleMarkup Language 可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义,用于标记电子文件使其具有结构性的源语言。

 

使用xstream.jar 工具包对JAVA对象进行转换:


 

2.6    RESTful 和RPC

两种主流的URL链接风格,一种是RPC,另一种是REST。

REST是Roy Thomas Fielding 在2000年的博士论文中提出。他是HTTP协议的主要设计者、Apache服务器的作者之一、Apache基金会的第一任主席。REST即 Representational State Transfer ,表现层状态转换。网络上的一个资源,用URL进行访问,资源通过表现层呈现出来,如图片可以通过JPG格式来表现,也可以通过GIF格式来表现,一段文字可以用HTML来表现,也可以通过JSON、XML来表现。如果客户端想要操作服务器,必须通过某种手段,如HTTP协议中的几种操作方式,如GET、POST、PUT、DELETE。这便是REST原则的一个大致思想,符合REST原则的设计,便称之为RESTful风格。

通过SpringMVC实现RESTful的CRUD操作:

 

2.7    基于HTTP协议的RPC实现

服务接口:


服务实现:

 

服务消费者实现,通过 servlet 解析请求参数,通过httpClient进行参数封装和远程调用:


 

服务提供者的实现,通过servlet获得远程调用请求,解析参数,通过serviceMap中已保存的服务,进行调用:


 

通过SpringMVC实现基于RESTful的 RPC。

服务消费者的实现:



 

服务提供者的实现:


Spring的配置:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值