稍微看了一下Spring的远程服务章节,讲到了RMI,Hessian,Burlap,Http invoker以及JAX-WS

1.RMI

原理:

1)在Spring服务端使用RmiServiceExporter将一个Spring bean包装在RMI的适配器里,并将这个适配器注册到服务端的RMI服务的ip和端口上,注册RMI服务

2)在客户端则使用一个代理工厂生成一个代理对象负责与远程的RMI服务进行通信,这个代理对象当做本地pojo这样使用

缺点:

1)由于使用任意端口交互,难以穿越防火墙

2)RMI基于Java,它使用了Java的序列化机制,因此服务端和客户端之间传输的对象必须保证是相同版本

2.Hessian共和Burlap

Hessian和Burlap分别是基于二进制和XML的远程调用技术,因此他们可以移植到其他非Java语言中,包括PHP,Python,C++,C#

原理:

1)在服务端配置一个叫HesseianServiceExporter的Spring MVC控制器,它负责接收请求并将请求翻译成POJO的调用

2)在客户端上的配置跟RMI差不多

缺点:使用私有序列化机制,对Java的序列化机制支持不好

优点:基于HTTP,解决了防火墙渗透问题

3.Spring HttpInvoker

工作流程跟前者差不多

优点:基于Http,解决了防火墙渗透问题和Java对象序列化问题

缺点:他是Spring框架提供的解决方案,所以服务端和客户端必须都是Spring应用

4.JAX-WS

是一个基于SOAP的Web服务,看起来搭建和调用流程跟前者都差不多,原理上完全没搞懂...

总的来说以上四种解决方案似乎都跟Java耦合,他们都需要在客户端程序里配置远程调用接口的代理类,会造成的问题就是

1.异步请求当代理类还未从服务端返回数据时代理类的处理逻辑该怎么做

2.客户端的代理类接口来自服务端,那么就需要服务端发布这个代理类的具体接口标准,加入这个接口更新,两边还需要同步

Spring 远程服务的更多相关文章

  1. spring远程服务知识梳理

    序:本文主要是总结和归纳spring的远程服务相关知识,可作为入门学习笔记.写博客目的也是为了进行知识梳理,便于以后查看.本文主要参考资料 spring 实战第三版 本文主要讨论内容如下: 远程调度概 ...

  2. Often Misused:Spring Remote Service 经常被误用:Spring远程服务

  3. 高性能页面加载技术--BigPipe设计原理及Java简单实现

    1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ...

  4. ApacheCN JavaWeb 译文集 20211017 更新

    使用 Spring5 构建 REST Web 服务 零.前言 一.一些基本知识 二.在 Spring5 中使用 Maven 构建 RESTfulWeb 服务 三.Spring 中的 Flux 和 Mo ...

  5. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  6. spring cloud 之 Feign 使用HTTP请求远程服务

    一.Feign 简介 在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLCo ...

  7. Spring整合Hessian访问远程服务

    声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianS ...

  8. dubbo使用Spring配置暴露服务和使用Spring配置引用远程服务

    提供者: <!-- 1.指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) --> <dubbo:application name="user-servic ...

  9. spring的CXF远程服务

    http://www.tuicool.com/articles/Rb2uUn      //远程调用  spring的cxf,亲自整合成功

随机推荐

  1. linux添加桌面快捷方式

    linux通过软件中心安装的程序快捷图标都放在/usr/share/applications/目录下.点选一个图标右键,选择复制到,目录选择桌面即可.    但是有一些软件自行安装后,在那个目录里没有 ...

  2. Django实战(10):单元测试

    尽早进行单元测试(UnitTest)是比较好的做法,极端的情况甚至强调“测试先行”.现在我们已经有了第一个model类和Form类,是时候开始写测试代码了. Django支持python的单元测试(u ...

  3. 使用linux mysql客户端建立表时遇到格式解析的问题

    发现在notepad++写好的建表脚本,粘贴到linux客户端后,执行时总是报我的脚本有问题. 我看了又看,发现建表脚本本身是没有问题,问题出在"Tab"键上和注释上边了. 解决办 ...

  4. hdoj2546 饭卡(DP,01背包)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路 首先要判断卡里的钱是不是大于等于5元,如果不足5元,直接输出余额:如果大于等于5元,则先留 ...

  5. Python并发编程-IO模型-非阻塞IO实现SocketServer

    Server.py import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.setblocking(False) #把soc ...

  6. Java异常处理中的恢复模型

    异常处理理论上有两种基本模型.Java支持终止模型,在这种模型中,假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行.一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行.长久以来,尽管 ...

  7. JPA实体类中的注解

    @Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相 ...

  8. Android IntentService

    IntentService简要分析 IntentService 继承自 android.app.Service.内部实现极其简单. 首先在 onCreate()中去开启了一个 HandlerThrea ...

  9. python获取文件属性

    提供三段代码 1.os模块 import os def TestFileAttributes(): # This function is platform indepedent. statinfo = ...

  10. Django-url反向解析与csrf-token设置

    url反向解析 在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等). 人们强烈希望不要硬 ...