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区别和应用领域的更多相关文章

  1. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  2. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  3. Java开发中所涉及的常用远程调用

    根据<Spring in Action>一书中指出,Java开发中常见的远程过程调用(RPC),常见的有一下四种方式: 1.远程方法调用(RMI) 2.Caucho的Hessian和Bur ...

  4. 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)

    前言 关于这个话题, 网上有很多文章,这里, 我希望通过最简单的话语与大家分享. 依赖注入和控制反转两个概念让很多初学这迷惑, 觉得玄之又玄,高深莫测. 这里想先说明两点: 依赖注入和控制反转不是高级 ...

  5. paip.java 开发中web server的选择jboss resin tomcat比较..

    paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...

  6. Java开发中常见的危险信号(中)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...

  7. Java开发中文件读取方式总结

    JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...

  8. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

  9. Java开发中常见的危险信号(上)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...

随机推荐

  1. C++ std::vector指定位置插入

    使用vector,必须加上:#include <vector> 1.初始化vector,一般有这几种方式: std::vector<std::wstring> v1; //创建 ...

  2. 介绍vue项目中的axios请求(get和post)

    一.先安装axios依赖,还有qs依赖 npm install axios --save npm install qs --save qs依赖包用post请求需要用到的 插入一个知识点: npm in ...

  3. 遇到的bug

    1  div出现莫名其妙的空白bug 之前写了一个后台管理系统,项目不小加上是改版,很多的js都是用的之前的,  bug多到自己都不想看, 其中有个是用iframe 框架加载表格页面,但是右边跟下边出 ...

  4. TP5动态路由配置好了但是报错was not found on this server的原因以及解决方法

    问题:The requested URL /xxxx.html was not found on this server 原因:apache的重写未开启,开启重写后,问题解决, 方法如下: apach ...

  5. 第一份Markdown。。。。。菜鸟给跪了

    #First Markdown ##Hello World ###Ahaha - Python - Ruby - C++ - Haskell - C - Java 1. C 2. C++ 3. C# ...

  6. 使用 Docker/LXC 迅速启动一个桌面系统

    使用 Docker/LXC 迅速启动一个桌面系统 Docker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建 ...

  7. centOS7 安装vsftp服务器

    一.目的:有许多时候我们需要从自己机器上,上传文件到Linux服务器上,想要上传文件就必须要通过FTP 协议(File Transfer Protocol(文件传输协议)).所以要在服务器上配置FTP ...

  8. 【数论】如何证明gcd/exgcd

    我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 ...

  9. Java大数类BigDecimal及八种舍入模式的介绍

    BigDecimal的引入 在利用Java编程语言开发银行.金融类等需要对数值进行高精度计算的软件时,我们经常使用BigDecimal和BigInteger这两个大数据类,而不是常见的int.long ...

  10. C++模板进阶指南:SFINAE

    C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...