读书笔记: 《分布式JAVA应用 基础与实践》 第一章 分布式JAVA应用

news/2024/5/18 22:57:32 标签: Java, 读书, 应用服务器, JMS, java7

    大型应用通常会拆分为多个子系统来实现,对于 JAVA 来说,这些子系统可能部署在同一台机器的多个不同的 JVM ,也可能部署在不同的机器上,但这些子系统又不是完全独立的,要相互通信来共同实现业务功能,对于此类 JAVA 应用,我们称之为分布式 JAVA 应用。

 

    使用分布式的要点就是尽量不要使用分布式。

 

    实现分布式系统通信,主要有两种方式:

     1.       基于消息方式实现系统间的通信

     1.1    基于 JAVA 自身技术实现消息方式的系统间通信。

     1)        TCP/IP + BIO

     2)        UDP/IP + BIO

     3)        TCP/IP + NIO

     4)        UDP/IP + NIO

 

     JAVA7 开始,提供 AIO 方式,跟 NIO 一样是异步 IO ,较之 NIOAIO 一方面简化了程序的编写,流的读取和写入都同操作系统来代替完成 Klein 一方面省去 NIO 中程序要遍历事件通知队列( Selector )的代价。 Windows 基于 IOCP 实现了 AIOLinux 目前只有基于 epoll 模拟实现的 AIO

 

     1.2    基于开源框架实现消息方式的系统间通信。

   如 Apache Mina, Jboss Netty

 

    2.       基于远程调用方式实现系统间的通信

    2.1    RMI 方式

    RMIRemote Method Invocation )是 JAVA 用于实现透明远程调用的重要机制。 JDK6 以前版本基于 TCP/IP + BIO 方式实现,以下是基于 RMI 的一次完整的远程通信过程:

    1 )客户端发起请求,请求转交至 RMI 客户端的 stub 类;
    2
stub 类将请求的接口、方法、参数等信息进行序列化;
    3
) 基于 socket 将序列化后的流传输至服务器端;
    4
) 服务器端接收到流后转发至相应的 skelton 类;
    5
skelton 类将请求的信息反序列化后调用实际的处理类;
    6
) 处理类处理完毕后将结果返回给 skelton 类;
    7
Skelton 类将结果序列化,通过 socket 将流传送给客户端的 stub
    8
stub 在接收到流后反序列化,将反序列化后的 Java Object 返回给调用者。

     Spring RMI 可以简单地实现 RMI 方式的 JAVA 远程调用

 

     2.2      WebService 方式

JDK6 集成了 WebService, 也可以使用 CXFAXIS 等开源项目

 

另外,JMS方式,也是应用非常广泛的一种方式,不知作者为何没题,这里稍为补充一下:

 

JMSJava 消息服务 Java Message Service应用程序 接口是一个 Java 平台 中关于面向 消息中间件 MOM )的 API ,用于在两个应用程序之间,或 分布式系统 中发送消息,进行异步通信。
以下是 JMS 中的一次远程通信的过程:
     1
)客户端将请求转化为符合 JMS 规定的 Message
     2
)通过 JMS APIMessage 放入 JMS QueueTopic 中;
     3
)如为 JMS Queue ,则发送中相应的目标 Queue 中,如为 Topic ,则发送给订阅了此 TopicJMS Queue
     4
)处理端则通过轮循 JMS Queue ,来获取消息,接收到消息后根据 JMS 协议来解析 Message 并处理。

 

常用的消息中间件有 IBM MQSeries WebLogic JMS Active MQJORAM OpenJMS 等。


http://www.niftyadmin.cn/n/622762.html

相关文章

软件python可以直接读取视频中的课件_如何用python实现视频关键帧提取并保存为图片《python物体识别视频教程》...

Python学习如何辨别好的Python教学视频每个人对好的Python视频的评判标准不一致,的核心是适合自己,且能学到并学会先进、符业需求的Python技能,这样的视频就是好视频,当你不知道如何选择的时候,就在网上多找一些&#…

python调用vbs脚本_TIA Portal中WinCC 脚本使用技巧汇总

(1)为什么一个由内部变量的 “数值改变” 事件触发的脚本不被执行?如果使用一个内部变量调用另外一个内部变量,以此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。此安…

读书笔记: 《分布式JAVA应用 基础与实践》 第二章 大型分布式JAVA应用与SOA

一、为什么需要 SOA 当应用获得用户的认可后,会不断发展。以豆瓣网为例,早期豆瓣网只有书评的功能,随着用户的增加,发展出今天的豆瓣社区,豆瓣读书,豆瓣电影和豆瓣音乐等功能。这些功能有各自的特色&…

python3.7程序实例_编程常见问题

通常,不要使用 from modulename import * 。这样做会使导入器的命名空间变得混乱,并且使得连接器更难以检测未定义的名称。 在文件的顶部导入模块。这样做可以清楚地了解代码所需的其他模块,并避免了模块名称是否在范围内的问题。每行导入一个…

word流程图怎么做虚线框_Word中的标尺怎么用?这样做可以提高工作效率!

你知道Word中的标尺有什么作用吗?很多小伙伴在编辑Word文档的时候总是会忽略标尺这个功能,不知道它有什么用处。标尺功能其实很强大,使用它可以更好的布局Word文档,也可以提高我们的工作效率。今天我们就一起来看看标尺有哪些功能…

《分布式JAVA应用 基础与实践》 第三章 3.1 Java代码的执行机制(一)

Java程序运行在JVM之上,JVM的运行状况对于Java程序而言会产生很大的影响,因此,掌握JVM中的关键机制对于编写稳定、高性能的Java程序至关重要。 JVM规范 定义的标准结构如图3.1所示。 (点击查看大图)图3.1 JVM标准结构…

python3.7下载tensorflow_Centos7安装Tensorflow(python 3)

本文记录了安装过程,为后续重复工作节省时间。有问题请联系zhangtieygmail.com 一开始基于python2安装的TensorFlow,后来发现要基于python3,又折腾了一遍。好的地方是基于virtualenv,以前的安装不影响本次python3。 先安装python3…

python交易是什么意思_py交易什么梗?起源及流行原因

原标题:py交易什么梗?起源及流行原因肮脏的PY(屁眼)交易是什么意思,最近很多看直播的玩家都不明白别人刷的PY交易是什么梗,被弄的一头雾水,下面牛游戏小编就为大家介绍PY交易到底是什么梗以及出处吧!PY交易这个梗的起…