初识消息队列——WebSphere MQ入门

消息队列是什么

消息队列对于我们来说应该并不陌生,消息队列(Message Queue,简称MQ),首先它是个队列,先进先出。队列里面放的是消息,消息则指的是两个独立的系统之间传递的数据,这两个系统可以是异构的,可以在不同的操作系统上,只需要写一段代码调用一下提供的API既可以发送或接收到消息。

为什么需要消息队列

这个问题的答案,我第一感觉就是解耦呗,两个系统之间抽离了一层出来用于处理消息传递,抽离出一层的好处是如果别的系统坏了也不会影响我这边系统的正常运行。解耦这算是一个,但还有一个原因可能更为重要,异步处理。在高并发场景中,往往同步处理容易导致阻塞,通过消息队列缓存消息,在某一时刻再去处理从而可以缓解系统压力。
(以上可能理解得有些粗糙…)

JMS规范

说到消息队列就不得不说JMS规范了。JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API。
JMS规范定义了两种消息通信模型:
1.Point-to-Point(P2P)点对点
2.Publish/Subscribe(Pub/Sub)发布订阅
在点对点模型中,消息生产者只需要将消息丢到消息队列中就可以了,一个消息只能有一个消费者,消费完之后消息就从队列中消失了。
发布订阅模型则涉及到一个主题(Topic)的概念,还有发布者(Publisher)和订阅者(Subscriber)。发布订阅模型允许一个消息可以有多个接收者。消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。
目前市场上大多数的消息中间件都为JMS提供了实现。

消息队列的基本概念

以IBM WebSphere MQ为例,WebSphere MQ的结构图如图所示:
这里写图片描述

1) 消息

通过消息队列传输的数据我们都称它为消息。到了队列里面,消息分成了消息头(消息描述符)和消息体两部分,消息头存放了消息的优先级,失效时间等信息,而消息体放的是具体的用户数据(可能是字符串,可能是封装好的对象等等)。此外消息还可以分成持久性和非持久性两种。非持久性的消息存储在内存中,性能很好但可靠性不高断电就会消失,持久性的消息则被存储在硬盘中的,可靠性高,断电可恢复。

2) 队列

队列是存储消息的地方,采用先进先出的设计保证消息的一致性。在消息队列中队列分很多种,其中包括本地队列、远程队列、传输队列、别名队列等。本地队列就是我们平时调用API所操作的队列。远程队列是目的队列在本地的一个引用,真正的队列在远程主机上,因此远程队列不占用本地的存储空间。
本地队列
这里写图片描述
远程队列
这里写图片描述

3) 队列管理器

队列管理器可看成是队列和其他对象的容器。一个队列管理器是WebSphere MQ中的一个基本的独立的执行单元。一台机器上可以运行一个或多个队列管理器。队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。

4) 通道

通道是消息队列中队列管理器之间传递消息的管道。
消息通道:消息通道是一种提供从一个队列管理器到另一个队列管理器的通信路径。主要用于在消息队列服务器和服务器之间传输消息的。消息通道是个单向连接,通过消息通道代理完成两个队列管理器的连接。
这里写图片描述
消息通道在WebSphere MQ中分成6种类型:
1.发送通道
2.接收通道
3.服务器通道
4.请求器通道
5.集群发送通道
6.集群接收通道
通道与通道之间要组合才能通信,通道组合共5种,分别是:
1.发送通道——接收通道
2.请求器通道——服务器通道
3.请求器通道——发送通道
4.服务器通道——接收通道
5.集群发送通道——集群接收通道
MQI通道:MQI通道是WebSphere MQ客户端和服务器上的队列管理器的通信的通道,当应用程序发出MQCONN或MQCONNX调用时,才开始建立连接。它是一个双向的通道,可以负责发送和接收。
MQI通道有两种类型:
1.客户端连接通道
WebSphere MQ客户端所使用。
2.服务器连接通道
运行队列管理器的服务器端所用,运行在客户端的应用程序使用这种通道进行通信。
基本概念性介绍大概就这些了吧。客户端应用程序具体用起来的话,使用WebSphere MQ Java API就可轻松连接上消息队列,配好MQEnvironment的一些参数,再new出MQQueueManager实例就可以调用队列发送消息了。具体怎么做我就不详细贴代码了。
在这里我要说明一些新手需要注意的几点:
1.用户记得加入mqm用户组。(2035报错)
2.记得启动队列管理器的监听端口(远程管理)。(2538报错)
3.创建的通道是服务器连接通道。
4.服务器连接通道的通道认证记录阻止用户里把星号去掉。(2035报错)

目录 目录 2 前言 9 本书范围 9 本书读者 9 进一步参考资料 10 第一部分 Websphere MQ原理和体系结构 11 第一章Websphere MQ原理 11 目标 11 1.1中间件 11 1.1.1中间件的优点 11 1.1.2中间件的分类 12 1.2三种通信技术的比较 13 1.3 WebSphere MQ的原理 15 1.4 WebSphere MQ的重要特点 16 1.4.1统一接口 16 1.4.2处理不依赖时间的限制 16 1.4.3给分布式处理提供的强健的中间件 16 1.5本章小节 17 1.6本章练习 17 第二章Websphere MQ体系结构 18 目标 18 2.1基本概念 18 2.1.1 WebSphere MQ对象(objects) 18 2.1.2 消息 19 2.1.3 队列 20 2.1.4队列管理器 24 2.1.4通道 25 2.1.5进程 29 2.1.6群集 29 2.1.7名称列表 29 2.1.8认证信息对象 30 2.1.9系统缺省对象 30 2.1.10 MQI(message queue interface) 30 2.2体系结构 30 2.2.1 WebSphere MQ和消息排队 31 2.2.2 队列管理器的进程 32 2.3客户机和服务器 33 客户机-服务器环境中的 WebSphere MQ 应用程序 33 2.4触发机制 33 2.4.1触发的概念 33 2.4.2触发类型 34 2.4.3触发的工作原理 35 2.5 队列管理器群集 36 2.5.1 群集的概念 36 2.5.2 群集的优点 37 2.5.3 群集的组件 38 2.5.4 创建群集 38 2.5.5 实现负载均衡 39 2.5.6 群集管理 40 2.6本章小结 41 2.7本章练习 41 第二部分 Websphere MQ系统管理 43 第三章WebSphere MQ系统安装 43 目标 43 3.1 规划安装 43 3.1.1 硬件要求 43 3.1.2 软件要求 44 3.2 安装 WebSphere MQ 46 3.2.1 WebSphere MQ 文档 46 3.2.2 WebSphere MQ安装 47 3.3 验证安装 49 3.3.1安装验证 49 3.3.2测试对象 49 3.4 本章小结 50 3.5本章练习 50 第四章WebSphere MQ 的管理 51 目标 51 4.1 本地和远程管理 51 4.2 使用命令管理 WebSphere MQ 51 4.2.1控制命令 52 4.2.2WebSphere MQ 脚本(MQSC)命令 52 4.2.3PCF 命令 54 4.3 WebSphere MQ 配置 56 4.3.1在 Windows 系统上更改配置信息 56 4.3.2 在 UNIX 系统上更改配置信息 57 4.4 WebSphere MQ 安全性 60 管理 WebSphere MQ 的权限 60 使用WebSphere MQ 对象的权限 61 4.5 WebSphere MQ 事务性支持 61 4.6 WebSphere MQ 死信队列处理程序 62 4.7本章小结 62 4.8本章练习 63 第五章WebSphere MQ 控制命令 64 目标 64 5.1 如何使用控制命令 64 WebSphere MQ 对象的名称 64 5.2 控制命令 65 控制命令集 65 控制命令举例 66 5.3 本章小结 66 5.4本章练习 66 第六章WebSphere MQ 互连通信 68 目标 68 6.1基本概念 68 6.1.1 什么是互连通信 68 6.1.2 分布式队列组件 72 6.1.3 死信队列 75 6.1.4怎样到达远程队列管理器 75 6.2 实现应用程序通信 77 6.2.1发送消息到远程队列管理器 77 6.2.2触发通道 79 6.2.3消息的安全性 80 6.2.4 WebSphere MQ对象配置实例 81 6.3通道的维护 83 6.3.1通道的状态 83 6.3.2通道维护命令 84 6.3.3设置MaxChannels和MaxActiveChannels属性 88 6.4配置侦听程序 88 6.4.1 Windows 平台 88 6.4.2 unix 平台 88 6.5本章小结 89 6.6本章练习 89 第七章 WebSphere MQ 恢复和重新启动 90 目标 90 7.1 WebSphere MQ的数据日志 91 7.1.1日志的概念 91 7.1.2日志控制文件 91 7.1.3日志类型 92 7.1.4计算日志的大小 92 7.2 使用数据日志进行恢复 93 7.2.1从掉电或通信故障中恢复 94 7.2.2恢复受损对象 94 7.3保护 WebSphere MQ 日志文件 96 7.4备份和恢复 WebSphere MQ 96 7.4.1备份 WebSphere MQ 96 7.4.2恢复 WebSphere MQ 96 7.5恢复方案 97 7.5.1磁盘故障 97 7.5.2受损的队列管理器对象 98 7.5.3受损的单个对象 98 7.5.4自动媒体恢复故障 98 7.6使用 dmpmqlog 命令转储日志 98 7.7本章小结 101 7.8本章练习 102 第八章 WebSphere MQ 问题诊断 102 目标 102 8.1错误日志 102 8.1.1日志文件 103 8.1.2忽略WebSphere MQ for Windows的错误代码 104 8.1.3操作信息 104 8.2死信队列 104 8.3配置文件和问题确定 104 8.4跟踪 104 8.4.1WebSphere MQ Windows的跟踪 104 8.4.2WebSphere MQ AIX的跟踪 106 8.5首次故障支持技术(FFST) 109 8.5.1FFST: WebSphere MQ Windows 版 109 8.5.2FFST: WebSphere MQ UNIX 系统版 110 8.6本章小结 112 8.7本章练习 112 第三部分 Websphere MQ 应用开发 113 第九章 设计Websphere MQ应用程序 113 目标 113 9.1介绍应用设计 113 9.1.1 规划设计 113 9.1.2 WebSphere MQ 对象 113 9.1.3 设计消息 114 9.1.4 WebSphere MQ 技术 114 9.1.5应用编程 115 9.1.6 测试应用程序 116 9.2 WebSphere MQ消息 116 9.2.1消息描述符 116 9.2.2消息种类 116 9.2.3消息控制信息和消息数据的格式 117 9.2.4消息优先级 117 9.2.5消息组 118 9.2.6消息持久性 118 9.2.7检索消息 119 9.2.8交付失败的消息 119 9.3本章小结 119 9.4本章练习 119 第十章 用MQI编程 119 目标 119 10.1概述 119 10.2 平台和语言 120 10.3 库和存根模块程序 121 10.4 体系结构模型 122 10.5 用MQI编程 124 10.5.1 基本API概念 125 10.5.2 连接到队列管理器 126 10.5.3 打开WebSphere MQ对象 127 10.5.4 关闭WebSphere MQ对象 130 10.5.5 断开与队列管理器的连接 130 10.5.6 将消息放入队列 131 10.5.7 从队列获取消息 133 10.5.8 从队列浏览消息 135 10.5.9查询对象属性 136 10.5.10设置对象属性 138 10.5.11 MQI中的事务处理 139 10.5.12 MQI中的消息分组 140 10.6本章小结 142 10.7本章练习 142 第十一章 用 C++ API编程 143 目标 143 11.1 概述 143 11.2 平台和语言 144 11.3库 144 11.4体系结构模型 145 11.5用C++ API编程 146 11.5.1连接到队列管理器 147 11.5.2打开WebSphere MQ对象 147 11.5.3 关闭WebSphere MQ对象 148 11.5.4 断开与队列管理器的连接 148 11.5.5 消息放入队列 148 11.5.6从队列获取消息 150 11.5.7浏览队列上的消息 153 11.5.8查询并设置对象属性 153 11.5.9事务处理管理 155 11.5.10消息分组 155 11.6本章小结 157 11.7本章练习 157 第十二章 用Java编程 158 目标 158 12.1 概述 158 12.2 平台 158 12.2.1 获得软件包 158 12.2.2 WebSphere MQ for Java的运行环境 159 12.3 使用WebSphere MQ for Java 161 12.3.1客户机连接模式 161 12.3.2绑定模式 162 12.3.3 类库 162 12.4用WebSphere MQ Java API开展工作 164 12.4.1 设置连接 164 12.4.2 打开队列 165 12.4.3 处理WebSphere MQ消息 166 12.5应用程序开发 167 12.5.1简单的消息发送器应用程序 168 12.5.2简单的消息接收应用程序 170 12.5.3请求/回复 172 12.5.4回复应用程序 175 12.5.5消息分组 177 12.5.6简单的组接收应用程序 180 12.6本章小结 183 12.7本章练习 183 第十三章 用ActiveX编程 183 目标 183 13.1 概述 183 13.2 平台和语言 184 13.3 库 185 13.4 架构模型 185 13.5 用WebSphere MQ automatin classes for ActiveX编程 186 13.5.1 连接到队列管理器 186 13.5.2 打开WebSphere MQ对象 187 13.5.3 基本操作 189 13.5.4 关闭对象 191 13.5.5 关闭连接 192 13.6 事务处理管理 192 13.7 分组 195 13.8 本章小结 195 13.9本章练习 195 第十四章 用AMI编程 195 目标 195 14.1 概述 196 14.2 平台和语言 198 14.3 库和包 199 14.4 体系结构模型 201 14.5 用AMI编程 202 14.5.1 连接到队列管理器 202 14.5.2 打开WebSphere MQ对象 204 14.5.3 基本操作 208 14.5.4 删除会话并关闭连接 212 14.6 AMI和MQI的比较 213 14.7 事务处理管理 213 14.8 分组 215 14.9本章小结 215 14.10本章练习 215 附录一 WebSphere MQ的缺省系统对象 215
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值