880 likes | 1.07k Views
声明. 本课件仅用于北京航空航天大学计算机学院的教学; 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。. 第 4 章 Message-Driven Bean. 北航计算机学院 linxl@buaa.edu.cn 2006 年 2 月 1 日. 内容列表. 4.1 Message 4.2 MOM 4.3 JMS 4.4 MDB 4.5 小结. 4.1 Messaging. Messaging
E N D
声明 • 本课件仅用于北京航空航天大学计算机学院的教学; • 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。
第4章 Message-Driven Bean 北航计算机学院 linxl@buaa.edu.cn 2006年 2 月 1 日
内容列表 • 4.1 Message • 4.2 MOM • 4.3 JMS • 4.4 MDB • 4.5 小结
4.1 Messaging • Messaging • Messaging is a method of communication between software components or applications • Messaging enables distributed communication that is loosely coupled • Message • Collection of data sent from one application to another • A message is a string of data or a null string sent or received by a task
Disadvantages of RPC • RPC方法忽略了: • 延迟(网络、应用程序) • 部分失败和并发 • … • RPC让通信更容易,但代价是: • 请求/响应通信 • 针对每一个请求,我们期望一个响应,阻塞调用者线程直到接收到响应(或者响应超时) • 代理和Stub强绑定 • 强绑定和类型一致使得编程容易,但强绑定和类型一致使得变化非常困 • RPC暴露行为
Disadvantages of CORBA • All CORBA messages are synchronous • Over-reliance on inheritance: inflexible implementation • Use of a IDL (Interface Definition Language) adds complexity
Disadvantages of RMI • Synchronous communication: • Calling process blocks until there is a response • Tightly coupled: • Client must find recipients, and know method arguments • No persistence • A lot of connections can be difficult to scale
解决方案 • 系统间通过管道通信 • 管道有逻辑地址 • 发送应用程序将消息放到管道中,然后处理其它工作 (“fire-and-forget”) • 管道将消息排队直到被接收应用程序使用(FIFO)
消息传递系统举例 • 文件传输 • 消息: 文件 • 目的地: 文件系统目录 • 运行环境: 操作系统的文件系统 • 数据库 • 消息: 数据集 • 目的地: 数据库表 • 运行环境: 数据库
JMS / MSMQ • 消息: byte, text, object, stream … • 目的地: 队列(point -to-point), 主题(publish-subscribe) • 运行环境: MOM环境支持 • SOAP • 消息消息: SOAP XML format • 目的地: (取决于传送方式) • 运行环境:...
为什么要使用消息传递 • (1) 灵活性 • (2) 可缩放性 • (3) 高负载的平缓释放 • (4) 集成性
(1) 灵活性 • 更多的数据流选择 • Fire-and-forget, multicast, disconnected, load forget, balancing, flow control, priority routing 等. • 多粒度的处理逻辑多粒度的处理逻辑 • Routing Slip • Content-Based Router • 更容易维护和变化更容易维护和变化 • 消息格式的变化不需要重新编译不相关的客户端 • 消息流的传递不需要修改中间结点 • 避免并发死锁 (和RPC响应阻塞相比)
(2) 可缩放性 • 竞争消费– 多个处理端可以读取同一队列 • 发送端不需要进行任何改变 • 粗粒度消息可以使处理端成为“无状态”
(3) 高负载的平缓释放 • 队列中存储的消息将会等待被处理 • 消息处理端或消费者会经可能快的取走消息 • 如果处理端阶段无法继续: • 我们可以增加更多的处理端 • 或者等待峰值负载被释放
(4) 集成性 • 消息传递不需要一致的类型系统 • 消息就是类型 • 消息传递可以连接多个系统 (.NET,J2EE,etc.) • XML消息非常适合此类场景 • 其它数据表现形式也可用 (CSV, 文本) • 消息传递的灵活性使得集成更容易
消息传递面临的挑战 • 使用队列来通信,而不是对象 • 双向通信需要至少2个队列:一个用于请求消息,另一个用于响应个队列 • 不存在会话状态 • 时序– 消息的到达可能是无序的 • 同步通信需要进行更多的设计 • 不存在对象标识 • 消息进入队列,而不是对象 • 不符合通常的客户/服务器模式 • 类似“生产者消费者”,甚至于“点对点”通信
小结 • 消息传递提供了另一种通信手段 • 消息传递具有灵活性 • 消息传递具有可缩放性 • 消息传递可以在多个管道上操作 • 消息传递需要程序员考虑的更多 • 在消息交换模式中,有很多不同的交换模式存在
4.2 MOM (Message Oriented Middleware) • MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 • 通过提供消息传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。
4.2.1 MOM Overview • Communication using messages • Messages stored in message queues • Optional message server (broker) decouples client and server
消息= 消息头(路由信息) + 消息正文 • 支持异步发送 • 不指定格式(松散约束) • 目的地= 命名的消息存储仓库 • 解耦合消息的产生者与消费者 • 便于重定向或者改变调用流程 • 运行环境= 多样化的发送方式 • 服务质量: Reliable, transacted, prioritized, deadline-based • 通信方式: publish-and-subscribe等. • 消息交换模式 • Request-response, fire-and-forget, request-async response
Message Queueing Technology • Store-and-forward • Transactional messaging • Cluster-based storage Messaging —— event-driven communication layer that allows applications to transfer information securely and reliably
Tasks of a Message Broker • Message transformation (quasi “marshalling”) & format dictionary • Message routing and transport • Message flow control & rules engine • Message warehouse (for “store and forward”) • Adapters • Centralized system management
Advantages: Scalable Architecture • Simplistic RPC or CORBA frameworks: M*N sockets • MOM frameworks: M+N sockets
Advantages - Synchronous vs. Asynchronous Messages • Most Distributed OLTP (e.g., EJB containers/RMI) require synchronous messaging • Synchronous messaging increases client latency • Synchronous messaging does not scale well • Synchronous messaging tightly couples the client to the server • E.g.: Legacy batch systems are difficult to couple with On-Line Transaction Processing (OLTP) systems unless you use asynchronous messaging • J2EE JMS provides asynchronous messaging to overcome these problems
Advantages——通讯程序可在不同的时间运行 • 消息放入适当的队列时,目标程序甚至根本不需要正在运行 • 即使目标程序在运行,也不意味着要立即处理该消息 • Advantages—对应用程序的结构没有约束 • 在复杂的应用场合中,通讯程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。 • 多种通讯方式的构造并没有增加应用程序的复杂性。
Messaging Models / Domains: Publish & Subscribe: Topics Point-to-Point: Queues
4.2.2 点对点消息传送 • 在点对点消息传送中,消息生成方被称为发送者,而使用方则被称为接收者。 • 它们通过被称为队列的目标来交换消息:发送者生成队列中的消息;而接收者则使用队列中的消息
特点: • 多个生成方可向一个队列发送消息。生成方可共享连接或使用不同连接,但它们均可访问同一队列 • 多个接收者可使用一个队列中的消息,但每条消息只能由一个接收者使用。所以,Msg1、Msg2 和 Msg3 由不同接收者使用 • 接收者可共享连接或使用不同连接,但它们均可访问同一队列
特点: • 发送者和接收者之间不存在时间上的相关性:客户端发送一条消息后,无论接收者是否正在运行,都能取出该消息 • 可在运行时动态添加和删除发送者和接收者,这样,即可根据需要扩展或收缩消息传送系统 • 消息在队列中的放置顺序与发送顺序相同,但它们的使用顺序则取决于消息失效期、消息优先级以及使用消息时是否使用选择器等因素
优势: • 由于多个接收者可使用同一队列中的消息,因此如果接收消息的顺序无关紧要,那么您可以平衡消息使用负载。 • 要发送到队列的消息始终保留,即使没有接收者也是如此。 • Java 客户端可使用队列浏览器对象检查队列内容。然后,它们可以根据通过该检查所获得的信息来使用消息。也就是说,虽然使用模型一般为 FIFO (first in, first out,先进先出),但如果使用者知道要使用哪些消息,即可使用消息选择器来使用未处于队列最前方的消息。管理客户端也可以使用队列浏览器来监视队列的内容。
4.2.3 发布/ 订阅消息传送 • 简单发布 / 订阅消息传送
特点 • 多个生成方可向一个主题发布消息。生成方可共享连接或使用不同连接,但它们均可访问同一主题。 • 多个订户可使用一个主题中的消息。订户可检索发布到一个主题中的所有消息,除非它们使用选择器过滤掉消息或消息在使用之前已过期。 • 订户可共享连接或使用不同连接,但它们均可访问同一主题。 • 长期订户可能处于活动状态,也可能处于非活动状态。在它们处于非活动状态时,代理会为它们保留消息。
特点 • 可在运行时动态添加和删除发布者和订户,这样,即可根据需要扩展或收缩消息传送系统。 • 消息发布到主题的顺序与发送顺序相同,但它们的使用顺序则取决于消息失效期、消息优先级以及使用消息时是否使用选择器等因素 • 发布者与订户之间存在时间上的相关性:主题订户只能使用在它创建订阅后发布的消息
4.2.4 MOMA • Message Oriented Middleware Association (MOMA) "is an international not-for-profit association of vendors, users, and consultants dedicated to promoting the use of messaging to provide multi-platform, multi-tier message passing and message queuing services for distributed computing architectures" • MOMA is not a standard-making body, but there are claims that it should be
MOM-vendors : • Verimation's product called "VCOM" , 1988 • Peerlogic's "PIPES" • Horizon Strategies' "Message Express“ • System Strategies' "ezBridge“ • BEA's MessageQ ( Digital's DECmessageQ ) • IBM's MQSeries • Bull's Flowbus • Apertus' MQ Edition • Microsoft’s MSMQ • Talaria’s Smartsocket • Etc…
MOM-vendors : • 东方通TongLINK/Q , 1993 • 黎明网络iSwitch, 1998(?) • 金蝶iMTS消息中间件,2001年 • 中创消息中间件InforBus/Q , 2001 • Etc…
Some common properties of MOM (1) • Messaging is an asynchronous method of passing information between programs • Queuing is a method of passing information indirectly through message queues • Online messaging is in real time, with message delivery typically occurring in seconds or even sub-seconds • Applications are isolated from communication networks which makes applications simpler, shields them from network changes, and provides greater network independence
Some common properties of MOM (2) • Looser coupling between application elements • Fewer communication channels between computer systems are easier to manage and more efficient • Messages can be persistent and non-persistent • Contents of messages can automatically be translated according to recipients needs
Products from different vendors (e.g., IBM's MQSeries, BEA's DECmessageQ, Verimation's VCOM ) have different APIs and don't easily interoperate with one another and each vendor's products employ proprietary location (directory, naming, and security) services.
4.3 JMS • 是SUN提出的旨在统一各种MOM系统接口的规范 • Java 消息传送服务规范最初是为了允许 Java 应用程序访问现有的 MOM 系统而开发的。 • 被许多现有的 MOM 供应商采用并且已经凭借自身的功能实现为异步消息传送系统。
4.3.1 JMS Overview • JMS is an API for asynchronous, transacted transacted message production,distribution, and delivery • Designed by Sun and Partners
JMS is a set of interfaces and associated semantics that define how a JMS client accesses the facilities of an enterprise messaging product
JMS Defines an Architecture That Includes: • JMS Provider • JMS APIs • ConnectionFactory, Destination • JMS Client • Producer, Consumer • Two Messaging styles • Point-to-Point • Publish/Subscribe • Definable Quality of Service • Reliability levels, transactions, priorities
JMS – Message Structure • Header message delivery fields • Delivery Mode (Persistent, Non-Persistent) • Priority, MessageID, CorrelationID, Type, Destination, Time-stamp, Replyto, Redelivered, Expiration • Properties - application defined property values • Body – data payload can be of 5 types: • Bytes - Opaque, arbitrary data • Objects - Serialized Java objects • Map - Name-Value pairs • Stream - Sequences of typed data primitives • Text - Text (optionally including XML) string data
Loosely coupled: • Producer doesn't need to know consumers, or consumer method arguments • Reliable: • Message is stored until it can be delivered • Asynchronous • Producer is not blocked, Consumer does not have to be available