• 1. WebSphere MQ v6 经典培训教材
  • 2. Page 2什么是 WebSphere MQ ?一种成熟的方式在基于SOA的组件或系统之间实现可靠的传递 像坚固而宽阔的大桥一样强健地连接应用和Web服务 它能够连接任何商业IT系统 通过易用、灵活、可靠及安全的方式帮助客户共享和交换重要的商业信息 WebSphere MQ 为用户和应用开发人员提供了一种直接,简单,成熟的手段以实现应用系统在不同操作系统平台之间稳定可靠地传递,交换重要的数据和信息,确保消息不丢失/不复传。 SOA,面向服务的体系结构(service-oriented architecture)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
  • 3. Page 3举例:应用A正在向应用B发送消息 时间的灵活性和独立性BAWebSphere MQBAWebSphere MQBAWebSphere MQBAWebSphere MQBA接收方-应用B繁忙或暂时不可达或者当前所在主机当机SOA的连通需要在应用之间提供的持久化(always-connected) 的链路 可以克服SOA资源不可得或者IT系统和网络不能提供服务造成的数据交互问题网络出现故障发送方-应用A在刚刚发送后当机在传输期间两个应用都出现故障
  • 4. Page 4简化应用和开发 Reusable, complex function is provided by the middleware, not the application. 高服务质量 Reliability, availability, and scalability are provided by the middleware, not the application. 更加安全 Security policy enforcement and resistance to attacks are provided by the middleware, not the application.WebSphere MQ的价值应用部署 . . .提高生产力 Lower development costs. Higher reuse of assets. 降低风险 Better tested deployments. Higher availability of skills. 加快了响应时间 Configurable changes. Faster development.对业务的影响 . . .
  • 5. Page 5IBM WebSphere MQ 在业界不可动摇的领导地位“In the world of finance, the WebSphere MQ messaging platform is the standard for integration solutions.” Martin Frick, Raiffeisen GroupNo-one integrates more reliably业界最成熟提供端到端数据传输的中间件 全世界超过10,000家 WebSphere MQ的客户 世界财富百强90%的客户 世界财富500强超过300家的客户 北美和欧洲66%的银行 银行业的客户通过 WebSphere MQ实现的交易价值超过35万亿美金 政府行业客户每天通过MQ交换的消息超过6.75亿条
  • 6. Page 6WebSphere MQ 在国内的客户 中国人民银行 工、农、中、建四大行 交通银行 中信银行 华夏银行 民生银行 中国太平洋保险公司 - 北京移动 - 北方九省电信 - 中国海关电子口岸 国家质检总局 国家税务总局 铁道部 公安部 新华社 - 等等…
  • 7. Page 7WebSphere MQ 的概念
  • 8. Page 8邮政系统与信件 Mailbox and Letter北京邮政上海邮政用户数据消息 = 消息头 + 用户数据队列 ( Queue )队列管理器通道 ( Channel )队列管理器
  • 9. Page 9消息组成 Message Component消息类型 报文消息 请求/应答消息 报告消息 支持的消息最大长度为100MB 由队列管理器处理的消息属性 唯一消息ID 相关性ID 路由信息 响应路由信息 消息优先级 消息代码集/编码 消息结构 超时间隔 ....任意 数据 由发送和接收程序构造解析 队列管理器不做解析消息 = 消息描述符 + 用户数据消息描述符用户数据...
  • 10. Page 10消息类型 Message Type请求消息 Request message 请求消息需要应答。从客户端发往服务器的查询和更新信息往往是一条请求消息。请求消息中应该包含回复消息的路由信息,即回复消息发往什么地方。 回复消息 Reply message 回复消息是对请求消息的回应。请求消息中的信息决定了回应消息的目的地。处理请求和回应的应用程序控制着消息间的关联,这种关联和队列管理器没有关系。 报文消息 Datagram message 数据报消息是不需要回复的消息,报文消息只是一次单向的信息传送。 报告消息 Report message 报告消息用于对一些系统故障的响应。有些报告消息是由应用程序创建的,有些报告消息是由队列管理器创建的。
  • 11. Page 11消息长度 Message Length 最大消息长度为 100 MB(其中 1 MB 等于 1 048 576 字节),缺省最大消息长度是 4 MB。 实际上,消息长度受以下方面的影响: 接收队列定义的最大消息长度 队列管理器定义的最大消息长度 传输队列定义的最大消息长度 发送或接收应用程序定义的最大消息长度 存储消息的可用空间
  • 12. Page 12消息内容 Message Content消息可以被认为是数据的最小传输单元,能够从一个应用到另外一个应用 消息可以被应用构建 消息可以被不同应用消费 消息能够包含任意种类的数据: 二进制数据 (声音片段, 电影文件, 图片等) 文本数据 Raw text XML 结构化数据 (C Structures, COBOL CopyBook, Serialized Java objects) 任意数据!!!
  • 13. Page 13消息的持久性 Persistent and non-Persistent队列管理器队列CC/RC队列CC/RC应用程序MQPUTMQPUT队列文件持久性消息非持久性消息持久性消息可以重新恢复 QM重新启动时非持久性消息会丢失 记录日志会影响系统性能日志文件
  • 14. Page 14消息超时 Message Expiry每个消息都具有单独的存活时间 在消息被发送到队列之后开始计时 如果消息没有被获取,自动将被破坏、抛弃 基于超市的提醒和重新路由的消息能够进行配置
  • 15. Page 15队列 QueuesDead Letter QueueTransmission QueueRemote QueueModel QueueLocal QueueAlias Queue按照创建方法分类 预定义队列 动态队列 按照功能分类 本地队列 local queue 远程队列 remote queue 传输队列 transmission queue 动态队列和模板队列 model queue 启动队列 initiation queue 群集传输队列 死信队列 dead letter queue 命令队列 command queue 回复队列 reply queue 别名队列 alias queue
  • 16. Page 16本地队列 local queue一个本地队列是一个物理上位于本地队列管理器中的队列。 本地队列实际上存在与本地系统的内存或磁盘存储中。 本地队列管理器控制队列的访问。 应用程序可以“PUT”消息到本地队列,也可以从本地队列“GET”消息,另外程序还可以查询或修改这些队列的某些属性。 对队列属性的修改需要相应的权限。Local Queue
  • 17. Page 17远程队列 remote queue一个远程队列属于一个不与该应用程序直接相连的队列管理器。对这类队列的访问包含有本地队列管理器和远程队列管理器的通信过程。这种通信涉及到通道。 应用程序可队远程队列进行某些操作,比如程序可以向一个远程队列放一条消息,但程序不能从远程队列中去消息。应用程序只能从本地队列读取消息。 远程队列定义中的目的队列不一定是远程队列管理器的本地队列,它也可以是一个远程队列定义,如图所示: Remote Queue
  • 18. Page 18传输队列 transmission queue传输队列是临时存储目标为远程队列管理器的消息的队列。队列管理器利用传输队列把消息分阶段地发向远程队列。队列管理器和消息移动程序一起负责把数据传送到远程队列。 当队列管理器收到把一条消息发往远程队列的要求后,它把消息发送到一个与目的队列管理器相关联的传输队列,传输队列位于本地队列管理器上。 目的队列管理器的名称可能由应用程序提供,也可以从远程队列定义中得到。 一个传输队列是两个队列管理器之间的发送方一端,所有直接目的地是同一队列管理器的消息都可放在同一个传输队列上。 把消息从一个队列管理器传送到另一个队列管理器只需要一个传输队列,然而也有可能在两个队列管理器之间存在着多个连接以提供不同的传输服务,每个连接都带有一个不同的传输队列。 传输队列是由MCA处理的,MCA负责在队列管理器之间可靠地传送消息。MCA实际上是处理传输队列上消息的MQI应用程序。Transmission Queue
  • 19. Page 19死信队列 dead letter queue死信(未传递的消息)队列是存储无法发送到其正确目的地的消息的队列,死信队列中的消息常常暗示了系统可能出现的问题。 死信队列是WebSphere MQ面对远端系统错误时的一种解决方案。应用程序可以利用WebSphere MQ提供的其他一些工具来监视并确保消息的可靠传送和接收。 在队列管理器创建时,系统会缺省创建一个死信队列,队列名是SYSTEM.DEAD.LETTER.QUEUE。 建议在生产系统上,需要独立创建一个死信队列,而不使用系统缺省的死信队列。 Dead Letter Queue
  • 20. Page 20其他队列 other queues命令队列:命令队列 SYSTEM.ADMIN.COMMAND.QUEUE 是用来存放由应用管理程序放的具有PCF(program command format)的消息的队列。 别名队列:别名队列实际上是本地队列、远程队列定义或队列名表的另外一个名字。它是一种简单的名字到名字的映射,它允许应用程序用另外一个名字来访问队列。别名队列允许在不修改应用程序的条件下访问其他名字的队列。 动态队列和模板队列:除了有固定定义的队列之外,WebSphere MQ还为程序在它们执行时提供了动态地创建队列的能力。为了简化在创建动态队列时所必需设置的许多参数,动态队列总是基于模板队列被创建的,模板队列定义了动态队列的所有属性。当应用程序试图打开一个模板队列时,WebSphere MQ就创建一个动态队列。
  • 21. Page 21 从队列中检索消息 先进先出(FIFO) 在消息描述符中定义的消息优先级,以 FIFO为基础检索具有相同优先级的消息 特定消息的程序请求 应用并行访问 队列管理器进行管理队列 QueuesDead Letter QueueTransmission QueueRemote QueueModel QueueLocal QueueAlias Queue
  • 22. Page 22Any System Queue Manager AApp AapiAny System Queue Manager BApp BapiMCAMCAQueue “A”消息传递 可靠的传递 时间独立性的传递 事务的支持 异步的传递MCA – Message Channel Agent队列管理器 Queue Managerdatadata网络的独立性 远程队列可以看作“本地”的队列Channel(SSL)KernelKernel优点 . . . 当应用在网络上被迁移的时候,无需重新编码和重新部署 统一性和一致性意味着应用可以在多平台交换信息队列管理器包含的工具 命令行管理器,监听器,触发监控,通道初始化,Eclipse管理控制台
  • 23. Page 23通道 Channels消息通道是一种提供从一个队列管理器到另一个队列管理器的通信路径 应用在队列管理器与队列管理器之间的通讯 单一方向 通常成对使用 应用在MQ客户端到队列管理器 单一的,双向的 通道的类型 发送通道(Sender) 接收通道(Receiver) 服务器通道(Server) 请求器通道(Requester) 群集发送通道(Cluster sender) 群集接收通道(Cluster receiver)
  • 24. Page 24MQ ServerMQ ServerWebSphere MQ如何工作 ?消息服务是基于队列 Queues 队列采用存储转发机制,实现可靠的数据传递 采用成熟的数据库技术,实现两阶段提交事务机制,保证消息不被丢失或重新复制 基于主题关键字的方式,采用发布/订阅模式动态的路由消息 运用多处理器的线程技术和集群技术加速消息的吞吐量 Message QueueApplication ZApplication A远程队列传输队列本地队列SSL
  • 25. Page 25WebSphere MQ 的功能和用法
  • 26. Page 26WebSphere MQ能做什么? 为需要交换数据和事件的应用、Web服务提供消息服务: 成熟的传输可靠性 事务的完整性、一致性 时间的独立性-同步和异步 易用性和快速部署 灵活性和可扩展性 高性能、高可用 安全性 可监控和审计 开放性,对JMS、Web Services等支持 集群 跨越多种平台 压缩和触发等 多种编程接口Application ZApplication AMQ is like email for SOA applications …but email you can bet the business onWebSphere MQ
  • 27. Page 27可靠性 WebSphere MQ是唯一可保证信息一次性传输的中间件,确保对消息一次仅且一次(once-and-only-once)的传递,做到不丢失、不重传、次序不乱。 WebSphere MQ提供逻辑工作单元支持(logical unit of work),备份和恢复等多种机制,确保信息传输,意思是一旦WebSphere MQ接受一个信息传输的任务,会确保信息被传送到目标平台。 信息的传输是一次且仅一次。 另外,强健的中间件机制保证业务数据一致性,并可在系统发生故障时,及时恢复,业务不会受到影响。
  • 28. Page 28创建MQ用户标识和组在安装 WebSphere MQ 之前,创建所需的用户标识和组标识。 用户标识和组标识都必须设置为 mqm。 对于单独的机器,可以在本地创建新的用户标识和组标识。 对于在网络信息服务(NIS)域中管理的机器,管理员必须在 NIS 主控服务器上创建这些标识。 建议将 mqm 用户的主目录设置为 /var/mqm。
  • 29. Page 29Generally, . . . . . . like installing other software on the same platformWindows Automatic execution of SETUP from the CD-ROM AIX smitty Sun Solaris pkgadd HP-UX swinstall Linux rpmWebsphere MQ for . . .MQ的安装
  • 30. Page 30命令行管理控制台
  • 31. Page 31命令行-创建队列管理器crtmqm -q QMgrName 必须有MQ的管理控制权限 QMgrName是一个必需的参数 -q 制定这个队列管理器为默认队列管理器 -ld LogPath 制定MQ日志存放的目录 -lf LogFilePages – 4k page 64 (32) ~ 65535 -lp LogPrimaryFiles – 2 ~ 510 (254) 默认值 3 -ls LogSecondFiles – 1 ~ 509 (253) 默认值 2 3 <= LPF + LSF <= 511 (255)
  • 32. Page 32命令行-删除队列管理器dltmqm QMgrName
  • 33. Page 33命令行-启动队列管理器strmqm QMgrName
  • 34. Page 34命令行-关闭队列管理器endmqm (-c or -w) QMgrName受控关闭(缺省值)立即关闭 Completes all current MQI calls, but no new onesendmqm -i QMgrNameendmqm -p QMgrName抢先关闭(仅在意外情况下使用改类型的关闭)
  • 35. Page 35命令行-运行MQ命令行控制台runmqsc QMgrName 通过脚本创建系统对象 runmqsc QMgrName < queue.tst
  • 36. Page 36命令行-MQSC命令ALTER CLEAR DEFINE DELETE DISPLAY END PING REFRESH RESET RESOLVE RESUME START STOP SUSPEND
  • 37. Page 37错误日志WebSphere MQ 使用许多错误日志来捕捉MQ自身的操作、任何队列管理器的启动和正在使用的通道的错误信息 在 WebSphere MQ Windows 版中,假设 WebSphere MQ 已经安装在缺省位置中: 如果队列管理器名称是已知的,则错误日志位于: c:\Program Files\IBM\WebSphere MQ\qmgrs\qmname\errors 如果队列管理器不是已知的,则错误日志位于: c:\Program Files\IBM\WebSphere MQ\qmgrs\@SYSTEM\errors 如果错误发生在客户机应用程序,则错误日志位于客户机的根目录中: c:\Program Files\IBM\WebSphere MQ Client\errors
  • 38. Page 38错误日志 续在 WebSphere MQ UNIX 系统版中: 如果队列管理器名称是已知的并且队列管理器是可用的,则错误日志位于: /var/mqm/qmgrs/qmname/errors 如果队列管理器不是可用的,则错误日志位于: /var/mqm/qmgrs/@SYSTEM/errors 如果错误发生于客户机应用程序,则错误日志位于客户机的根目录中: /var/mqm/errors
  • 39. Page 39错误日志 续在产品安装时,在qmgrs 目录下将创建@SYSTEM errors子目录。errors子目录最多可以包含 3 个错误日志文件,分别是: AMQERR01.LOG AMQERR02.LOG AMQERR03.LOG 每一个文件的大小都为256 KB 当产生错误消息时,它们被放置在 AMQERR01 中。当 AMQERR01文件比 256 KB 大时,将其复制成AMQERR02。在复制前,将 AMQERR02 复制到 AMQERR03.LOG。这样将删除了AMQERR03的以前内容。
  • 40. Page 40死信队列出于某种原因无法发送的消息都被放置在死信队列,可以通过 MQSC 命令 DISPLAY QUEUE 来检查队列是否包含消息。 如果队列包含消息,则使用所提供的浏览样本应用程序(amqsbcg)来浏览队列上的消息。 样本应用程序将显示每个消息的消息描述符和消息上下文字段。 应该通过分析消息的死信头来确定消息被放在死信队列的原因。
  • 41. Page 41首次故障支持技术 FFST这些错误通常都是严重的、不可恢复的错误,要么是系统的配置问题或 WebSphere MQ 内部错误 在 WebSphere MQ Windows 版中,FFST 信息是存放在 c:\Program Files\IBM\WebSphere MQ\errors 目录下的文件中 对于 WebSphere MQ UNIX 系统版,FFST 信息是存放在 /var/mqm/errors 目录的文件中 在大多数情况下,当生成 FFST 记录时,系统管理员基本上不能自己解决问题,而需要寻求IBM 支持中心的帮助
  • 42. Page 42内容WebSphere MQ概述 功能介绍和基本概念 WebSphere MQ的安装 常见平台的安装 MQ相互通信配置实例 WebSphere MQ管理 Eclipse管理控制台 命令行 WebSphere MQ开发指南 C 和Java的开发 WebSphere MQ问题诊断 WebSphere MQ的优化
  • 43. Page 43日志参数调整通过MQ的控制命令crtmqm来设置 上面三个参数创建队列管理器的时候就要指定 LogBufferPages 代表日志缓冲区的大小,增大它的数值,也可以提高性能,如:可以把它的值设置为最大,即512x4K pages=2MB 通过修改qm.ini文件来设置 crtmqm -lf -lp -ls
  • 44. Page 44队列管理器配置文件参数调整通过修改该队列管理器的配置文件qm.ini,可以调整一些MQ相关参数 DefaultQFileSize 队列文件的大小(Maximum amount of bytes in a queue) DefaultQBufferSize 每一个队列的非永久性消息保留的内存大小(Maximum amount of memory reserved for non-persistent messages) TuningParameters: DefaultQBufferSize=1024000 DefaultQFileSize=1000000000
  • 45. Page 45队列管理器配置文件参数调整 MaxChannels和MaxActiveChannels 分别代表队列管理器允许配置的通道的最大个数和允许同时运行的通道的个数 AdoptNewMCA 停止先前存在的通道进程,并且为新的通道启动请求启动一个新的进程 AdoptNewMCATimeout 代表新进程等待旧进程结束的时间长度(以秒为单位) AdoptNewMCACheck 代表启用 AdoptNewMCA 属性时必需的检查类型 CHANNELS: MaxChannels=2000 MaxActiveChannels=2000 AdoptNewMCA=ALL AdoptNewMCACheck=ALL AdoptNewMCATimeout=30
  • 46. Page 46队列管理器配置文件参数调整 KeepAlive参数的作用在于:当设置KeepAlive=Yes时,表示操作系统的TCP/IP参数设置对WebSphere MQ生效。 可以利用调整操作系统层面的TCP/IP参数,更好地实现MQ的断网续传。 TCP: KeepAlive=Yes AIX系统:修改/etc/rc.net文件 /usr/sbin/no -o tcp_keepidle=120 /usr/sbin/no -o tcp_keepintvl=20
  • 47. Page 47MQ测试样例测试1 本地通道测试 1、 使用mqadmin用户登录 2、 执行crtmqm -q TEST_QM,建立测试用的消息管理器。 3、 执行strmqm TEST_QM,启动测试用的消息管理器。 4、 执行runmqsc TEST_QM 5、 输入define ql(DATA),回车,建立本地队列DATA 6、 输入end回车 至此,本地测试通道搭建完成,下面进行测试。 1、 执行amqsput DATA TEST_QM 2、 随便输入一些内容,一行为一条消息,可输入多条。 3、 输入完毕连续按两次回车退出。 4、 执行amqsget DATA TEST_QM,看看能否收到刚才输入的消息,如果能收到,证明MQ本地通道是正常的。如果收不到,则MQ安装有问题。
  • 48. Page 48MQ测试样例测试2 远程通道测试 如果测试1通过,继续进行远程通道测试。 1、 执行runmqsc TEST_QM 2、 输入define chl(TO.TEST) chltype(RCVR) trptype(tcp),创建接收方通道。 3、 输入end并回车。 4、 执行crtmqm TEST_RQM,建立模拟的远程通道。 5、 执行strmqm TEST_RQM 6、 执行runmqsc TEST_RQM 7、 输入define ql(TEST) usage(xmitq) 8、 输入define qr(REMOTE.DATA) rname(DATA) rqmname(TEST_QM) xmitq(TEST) 9、 输入define chl(TO.TEST) chltype(sdr) conname('127.0.0.1(1111)') xmitq(TEST) trptype(tcp),创建发送方通道。 10、输入end 11、执行runmqlsr -t tcp -m TEST_QM -p 1111,启动接收方的监听。 12、新打开一个telnet会话,用mqadmin登录,执行runmqsc TEST_RQM 13、输入start chl(TO.TEST) 14、输入end
  • 49. Page 49MQ测试样例至此,模拟的远程测试通道建立完成,以下进行测试。 1、 执行amqsput REMOTE.DATA TEST_RQM 2、 随便输入一些内容,一行为一条消息,可输入多条。 3、 输入完毕连续按两次回车退出。 4、 执行amqsget DATA TEST_QM,看看能否收到刚才输入的消息,如果能收到,证明MQ本地通道是正常的。如果收不到,则MQ安装有问题。 删除测试 1、 执行endmqm -p TEST_RQM 2、 执行endmqm -p TEST_QM 3、 执行dltmqm TEST_RQM 4、 执行dltmqm TEST_QM
  • 50. Page 50