• 1. 第四章 消息中间件 Message-OrientedMiddleware 为什么选择消息中间件?----利用MQ message queuing实现企业间的数据交换----实现企业级大规模数据传送---部署规模庞大 ---网络状况复杂 ---数据量大 ---系统维护管理复杂----分布式对象技术局限性
  • 2. 图来源:www.ibm.comWebSphere MQ
  • 3. 1. 消息中间件概念消息中间件作为一个中间层软件,它为分布式系统中创建、发送、接收消息 提供了一套可靠通用的方法,实现了分布式系统中可靠的、高效的、实时的 跨平台数据传输。 面对规模和复杂度都越来越高的分布式系统,消息中间件技术显示出了它的 优越性: 采用异步通信模式 客户和服务对象生命周期的松耦合关系 MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基 于数据通信来进行分布式系统的集成。
  • 4. 2. MOM特点消息传递和排队技术有以下三个主要特点: 1. 通讯程序可在不同的时间运行。 2. 对应用程序的结构没有约束。 3. 程序与网络复杂性相隔离。 MOM特点:时间独立性、安全可靠、支持多种数据传送、断点续传、数据压缩等
  • 5. 3.1 消息传递服务模型应用程序A应用程序B消息中间件接口发送队列接受队列通道代理网络消息中间件接口 通道代理 发送队列 接受队列3. 消息传递概述MOM中间件
  • 6. 3.2 点到点的消息传递(point to point messaging)消息由发布者发送到特定的接收者。Client 1QueueClient 2SendsMsgConsumesAcknowledges点到点消息队列服务Msg
  • 7. 3.3 发布/订阅消息传递(publish/subscribe messaging)消息发布者可以将消息发布到主题(Topic), 用户或应用程序根据主题或 内容接收消息。Client 1TopicClient 2Client 3PublishesMsgDeliversSubscribesDeliversSubscribesMsgMsg发布/订阅消息传递服务
  • 8. 3.4 推/拉消息传递模型推消息模型:消息生产者将消息发送给消息传递服务,消息传递服务 又将消息推给消息消费者。拉消息模型:消费者请求消息服务接收消息,消息服务从消息生产者拉 该消息。
  • 9. (本页无文本内容)
  • 10. 4. WebSphere MQ1.2.1 MQ的基本概念 队列管理器 manager: MQ系统中最上层的概念,由它提供基于队列的消息服务。2. 消息 message在MQ中,把应用程序交由MQ传输的数据定义为消息。 例如:用户各种类型的数据文件、某个应用向其他应用发出的处理请求
  • 11. 消息由两部分组成:消息描述符(Message Header),描述消息的特征,如:消息的优先级 生命周期、消息ID、路由信息等。2. 消息体(Message Body),即用户数据部分。消息描述符用户数据消息分类: 报文消息 请求/应答消息 报告消息支持消息最大长度为100MB非持久性(non-persistent)消息,存储在内存中,是为提高性能而设计的。持久性(persistent)消息,存储在硬盘中,并且记录数据日志,高可靠性。用户数据MQ不关心//在MQ中,还有逻辑消息和物理消息的概念
  • 12. a. 队列 queue 队列是消息安全存放地,队列存储消息直到它被应用程序处理。程序A程序B队列管理者消息队列 1消息队列 2程序CMQI消息通道 管理器消息通道 管理器队列管理者消息队列 MQI网络MQ中,队列分为很多种类型包括:本地队列、远程队列、模板队列、动态队列、 死信队列等。
  • 13. b. 通道 channel通道是MQ系统中队列管理器之间传递消息的管道。通道分类:1. 消息通道:用于在MQ服务器和服务器之间传输消息,该通道是单向的。2. MQI通道:MQ Client和MQ Server之间的传输消息,它的传输是双向的。3. 群集(Cluster)通道:是位于同一个MQ群集内部的队列管理器之间的通信。发送器 通道SDR接收器 通道RCVRStart ChannelSend Message消息通道中最常用SDR/RCVRSenderReceiver
  • 14. 通道是MQ的关键,主要包括手动方式启动和自动方式(触发)启动。 手动方式:手动方式维护有两个通道参数值得注意: 1)DISCINT(Disconnect Interval, 断开间隔) 2)HBINT(Heart Beat Interval,心跳间隔) 当传输队列中没有消息要传送时, 发送方通道(SDR)、服务器通道(SVR) 将在等待了该 参数指定的时间间隔后断开连接,停止通道。当传输队列中没有消息要传送时,发送方通道(SDR)、服务器通道(SVR)定时 向对方发送心跳测试信号,双方通道借这个信号作消息发送事务的同步(quiesce)。
  • 15. 4.1 MQ的基本配置举例 在DOS环境下进入MQ的安装目录/bin 示例一(本机SDR通道, 接受端RCVR通道) 在发送方A (本机:127.0.0.1) 1) 建立队列管理器QMA: crtmqm QMA //删除队列管理器 dltmqm QMA 2)启动队列管理器strmqm QMA //停止队列管理器 endmqm QMA     运行MQSeries命令runmqsc QMA 3) 定义本地传输队列: define qlocal (QAQB) usage (xmitq) defpsist(yes) 4) 创建远程定义: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq (QAQB) //远程定义(本地队列管理器):QR.TOB //远程队列名称:LQB //远程队列管理器名称:QMB //传输队列名称:QAQB
  • 16. 5) 定义死信队列    ALTER QMGR DEADQ(QMA.DEADQ)    DEFINE QL(QMA.DEADQ) REPLACE 6) 定义发送通道: define channel (A.TO.B) chltype (SDR) conname ('192.168.0.198(1414)') xmitq (QAQB) trptype (tcp) 7)end    //退出MQSC命令环境 8)runmqlsr –t TCP –m QMA  //启动监听器 9)runmqchl –c A.TO.B –m QMA //启动通道 //注意:启动此步之前,需要保证QMB上的通道定义完成并且侦听器在QMB上已经启动
  • 17. 在接收方B:( 假设为: 192.168.0.198:1414 / 127.0.0.1:1414) 1) 建立队列管理器QMB: crtmqm QMB 2) strmqm QMB 3) runmqsc QMB 4) 定义死信队列    ALTER QMGR DEADQ(QMB.DEADQ)    DEFINE QL(QMB.DEADQ) 5) 定义本地队列LQB: define qlocal (LQB) DEFPSIST(YES) 6) 创建接收通道: define channel (A.TO.B) chltype (RCVR) trptype (tcp) 7)end    //退出MQSC命令环境
  • 18. —————— 测试验证 ——————   AMQSPUT QR.TOB QMA //在QMA队列管理器的QR.TOB远程定义中输入一些消息数据  AMQSGET LQB QMB  //在QMB队列管理器的LQB本地消息队列中读取通过管道A.TO.B传递过来的数据
  • 19. 4.2 MQ的通信模式1. 点对点通信:支持一对一、一对多、多对多、多对一等配置2. 多点广播:能够将消息发送到多个目标站点(Destination List)3. 发布/订阅:在Broker订阅Topic,有发布相同Topic的话就接收。4. 群集:简化点对点通信模式中的系统配置。群集中队列管理器之间 能够进行负载均衡。
  • 20. 4.3 MQ的APIMQ支持多种语言:C++、Java、C#、VB等WebSphere MQ Java API
  • 21. 其它比较流行的JMS(Java Message Service)商业软件和开源产品WebLogic 是BEA公司实现的基于工业标准的J2EE应用服务器, 支持大多数企业级JavaAPI,它完全兼容JMS规范,支持点到点和发布/订阅消息模式, 它具有以下一些特点:   1) 通过使用管理控制台设置JMS配置信息;   2) 支持消息的多点广播;   3) 支持持久消息存储的文件和数据库;   4) 支持XML消息,动态创建持久队列和主题。
  • 22. 2. SonicMQ是Progress公司实现的JMS产品。除了提供基本的消息驱动服务之外, SonicMQ也提供了很多额外的企业级应用开发工具包, 它具有以下一些基本特征:   1) 提供JMS规范的完全实现,支持点到点消息模式和发布/订阅消息模式;   2) 支持层次安全管理;   3) 确保消息在Internet上的持久发送;   4) 动态路由构架(DRA)使企业能够通过单个消息服务器动态的交换消息;   5) 支持消息服务器的集群。
  • 23. 3. Active MQ是一个基于Apache 2.0 licenced发布,开放源码的JMS产品。 其特点为:   1) 提供点到点消息模式和发布/订阅消息模式;   2) 支持JBoss、Geronimo等开源应用服务器,支持Spring框架的消息驱动;   3) 新增了一个P2P传输层,可以用于创建可靠的P2P JMS网络连接;   4) 拥有消息持久化、事务、集群支持等JMS基础设施服务。
  • 24. 4. OpenJMS是一个开源的JMS规范的实现, 它包含以下几个特征:   1) 它支持点到点模型和发布/订阅模型;   2) 支持同步与异步消息发送;   3) 可视化管理界面,支持Applet;   4) 能够与Jakarta Tomcat这样的Servlet容器结合;   5) 支持RMI、TCP、HTTP与SSL协议。