Java开发中RMI和webservice区别和应用领域
Java开发中RMI和webservice区别和应用领域
一、RMI和webservice区别和联系
0. 首先,都是远程调用技术。
1. RMI是在TCP协议上传递可序列化的java对象(使用Stream 技术(serialize)传输),只能用在JVM上,绑定语言:RMI的客户端和服务端都必须
是java;
2. webservice是在http协议上传递xml文本文件,与语言和平台无关;
3. RMI性能优于webservice;
4. RMI多用于开发分布式应用系统;
RMI为Java平台的分布式计算提供了一个简单而直接的模型。因为Java的RMI技术是基于Java平台的,所以它将Java平台的安全性和可移植性等优点带到了分布式计算中。RMI大大扩展Java的网络计算能力,它为编写基于分布式对象技术的企业级Internet/Intranet应用提供了强大的系统平台支持。
应用实例:当你开始在一个真正的网络上设计一个分布式应用系统时,以下几个相互冲突的设计问题会很清楚地反映出来:
1.相互作用频繁的组件彼此间应该靠得更近些。
2.某些组件只能在特定的机器或位置上运行。
3.小组件增加了配置的灵活性,但它同时也增加了网络的拥塞。
4.大组件减少了网络的拥塞,但它同时也减少了配置的灵活性。
RMI的位置独立性极大地简化了将应用组件分布化的任务,使其能够达到最合适的执行效果。有了RMI支持,应用系统可以将互相关联的组件放到靠地比较近的机器上,甚至可以将它们放到同一台机器上或同一个进程中。将关联不是很紧密的组件进行拆分开发部署。而系统组件之间的通信由RMI来完成。
当系统是由几个大组件构成时,如果把这几个组件做为一个整体部署在同一台机器上,会严重影响系统的整体性能,尤其是在机器的负载比较小的情况下将会更加糟糕。这时候我们可以将系统进行拆分并部署在多个机器上,而系统的几个组件之间的通信由RMI来完成,开发人员不用去管这些机器到底在哪。比如,可以将集中的数据库事务应用组件单独部署在另外的服务器上运行。将一个系统分解成一组不同的组件有很多好处,包括故障独立性,隔离各个部分所获得安全性,以及在不影响整体系统的前提下改变某个组件的功能和实现方法等。
另外一种情况,比如系统的某一个组件只能在特定的机器或位置上运行(处于安全考虑等原因),这时候系统必须将此组件单独拆分出来部署,这样系统之间的通信也是由RMI来完成。
此外,如果系统的某一个功能必须采用指定的语言(非java)才能完成,也必须对系统进行组件拆分,这时候系统之间的通信就不能使用RMI了,因为RMI只能用于java语言的系统,这时候可以考虑其他的系统集成方案,比如webservice技术,微软的DCOM来完成系统组件之间的通信。
RMI是Java的特性,那么它必须基于JVM运行,也就是说RMI无法跨语言运行。而WebService就不同了,Soap是基于标准Http协议的,是一种与语言无关的字符级协议,所以它可以更好的实现异构系统的通信
而webservice则多用于以HTTP协议传输数据的形式给客户提供可在公网上远程调用的能完成某种功能需求的程序接口。客户系统和提供服务的系统往往是不同编程语言的异构系统(当然也包括同种编程语言的异构系统), Webservice能够实现不同编程语言异构系统之间进行通信。并且以webservice的形式提供服务,可以很好的保障服务系统的安全性.
web service提供的服务是基于web容器的,底层使用http协议,这都是基于一种请求应答的机制,是跨系统跨平台的。
Web Servcie最主要的优点是: 即跨语言,跨平台的不同系统之间的通信。 现在企业内部的很多系统集成,企业和企业之间的系统集成的问题。Web Service是主要的解决方案(服务重用,降低开发成本,只开放自己愿意开放的服务)。l多用于为客户或用户提供远程的服务,比如天气预报服务,气象台服务器对各地客户端提供天气预报接口API;再比如违章系统查询接口等。
参考: webservice的概念,webservice可以做什么?webservice什么时候用?
网址:http://blog.csdn.net/weiguolee/article/details/6881411
二、JMS 与RMI
Java消息服务 ( Java Messaging Service, JMS ) 是一种允许应用程序创建、发送、接受和读取消息的Java API 。
据我个人的理解,JMS和RMI完全是两个不同应用场景中的技术,没有可比性。
Java 消息服务(Java Message Service (JMS))是集成到 J2EE 中的一部分,它使得 MQ 服务可以为任何 J2EE 应用程序所用。即JMS是用于解决消息排队(MQ)问题的java-API,在实际应用中JMS+MQ服务器(有时也被称为面向消息的中间件(MOM))相结合来完成消息排队类型的应用程序开发。
MQ 服务器是什么?用
MQ 的说法,消息只是一个字节流(这个字节流可以是一个 XML 文档、一个序列化的 Java 对象、一个文本字符串或甚至是一条空消息),对消息的解释留给应用程序域来做,MQ 服务器不对消息施加任何语义和结构限制。消息存储在MQ服务器的消息队列中,MQ 服务器允许您将消息加入到队列以及从队列中取走消息。
原文地址:https://blog.csdn.net/zolalad/article/details/25220805
Java开发中RMI和webservice区别和应用领域的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- Java开发中所涉及的常用远程调用
根据<Spring in Action>一书中指出,Java开发中常见的远程过程调用(RPC),常见的有一下四种方式: 1.远程方法调用(RMI) 2.Caucho的Hessian和Bur ...
- 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)
前言 关于这个话题, 网上有很多文章,这里, 我希望通过最简单的话语与大家分享. 依赖注入和控制反转两个概念让很多初学这迷惑, 觉得玄之又玄,高深莫测. 这里想先说明两点: 依赖注入和控制反转不是高级 ...
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- Java开发中常见的危险信号(中)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
随机推荐
- Python判断文件和文件夹是否存在的方法
Python判断文件和文件夹是否存在的方法 这篇文章主要介绍了Python判断文件和文件夹是否存在的方法,本文还讲解了判断是否为文件或者目录的方法.os.path.lexist的作用.FTP中判断文件 ...
- 利用CSS使footer固定在页面底部
1.HTML基本结构 <!DOCTYPEhtml> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headr ...
- 【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式
1:设置mysql原生分页 # 监控系统首页显示分页 def MyPagination(limitid,offsetid): limitid =str(limitid) offsetid =str(o ...
- Spring Boot:Boot2.0版本整合Neo4j
前面介绍了Boot 1.5版本集成Neo4j,Boot 2.0以上版本Neo4j变化较大. 场景还是电影人员关系 Boot 2.0主要变化 GraphRepository在Boot2.0下不支持了,调 ...
- Facebook iOS App如何优化启动时间
http://www.cocoachina.com/ios/20160105/14870.html 提高 Facebook 应用的性能已经成为 Facebook 持续关注的领域.因为我们相信一个高性能 ...
- NOIP模拟 17.8.18
NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也 ...
- CSS基础学习中的几大要点心得
CSS是前端学习中较为简单但又非常复杂的课程,说简单是因为学习它并不需要太多推理论证和逻辑思维,说它非常复杂则是更多的侧重在它的“杂”上,因为太多的格式和套路需要我们注意.以下谨列出本人在CSS学习中 ...
- 微信小程序分析见解
前两天朋友圈都快被小程序给刷爆了: 对于小程序这方面, 由于没有公测的资格.所以翻阅了许许多多的资料,来了解一下小程序: 微信小程序: 小程序是一种不需要下载安装即可使用的应用,它实现了应用&quo ...
- 阿里OSS-OSSFS
简介 OSSFS就以把OSS作为文件系统的一部分,能让你在linux系统中把OSS bucket挂载到本地文件系统中,实现数据的共享. 主要功能 ossfs 基于s3fs 构建,具有s3fs 的全部功 ...
- oracle控制何时触发审计动作
1)By session / By Access by session对每个session中发生的重复操作只记录一次 by access对每个session中发生的每次操作都记录,而不管是否重复. 对 ...