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 ...
随机推荐
- PHP队列类
/** * Created by PhpStorm. * User: LAMP-Q哥 * Date: 2017/8/3 * Time: 12:58 */ class Queue { private $ ...
- PHP基础-生成静态html页面原理是怎样
设置example.html为模板文件,然后按照此模板文件生成article-1.html~article-5.html,以此来做简单的演示,代码如下: <?php//将数据存入二维数组$con ...
- es6 babel转码器安装配置及常见命令
示例:在d盘,新建文件夹es6,文件夹里新建一个文件es6.js. (1)先全局安装babel-cli,输入命令npm install babel-cli -g (2)输入d:( 进入d盘),再输入c ...
- 自己动手写js分享插件 [支持https] (QQ空间,微信,新浪微博。。。)
转载:https://blog.csdn.net/libin_1/article/details/52424340 废话不多说,传送门:http://download.csdn.net/detail/ ...
- Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解
此文来源于:https://yq.aliyun.com/ziliao/43471 参考原文件之外,做了些修改. Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录 ...
- Codeforces 276D
题目链接 这题真的体现了自己思维的不足,考虑问题只是考虑他的特殊性,却不能总结出它的一般性规律. 对于这题, 如果L == R , 那么结果为0. 否则, 我们只需要找到最高的某一位 (二进制数中的某 ...
- 设备 VMnet0 上的网络桥接当前未在运行。
早上,我打开我的虚拟机,却发现一个问题, 桥接网络怎么都连接不上. 报的是如下的错误 ------------------------------ 设备 VMnet0 上的网络桥接当前未在运行.该虚拟 ...
- 2019-6-23-开源项目使用-appveyor-自动构建
title author date CreateTime categories 开源项目使用 appveyor 自动构建 lindexi 2019-06-23 11:47:40 +0800 2019- ...
- Nuxt.js打造旅游网站第1篇_项目环境搭建
1. 安装 使用官网提供的脚手架工具 create-nuxt-app,创建一个nuxtjs项目. npx create-nuxt-app xianyun 注意:在NPM版本5.2.0默认安装了npx, ...
- 2019-1-16-win10-uwp-发布的时候-ILC-编译不通过
title author date CreateTime categories win10 uwp 发布的时候 ILC 编译不通过 lindexi 2019-1-16 20:37:5 +0800 20 ...