IBM MessageBroker笔记系列(一)_第1页
IBM MessageBroker笔记系列(一)_第2页
IBM MessageBroker笔记系列(一)_第3页
IBM MessageBroker笔记系列(一)_第4页
IBM MessageBroker笔记系列(一)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IBMIBM MessageBrokerMessageBroker 笔记系列 一 笔记系列 一 前言前言 SOA 已经在中国喊了几年 连象牙塔的大学生都知道了 但实施的案例并 不多 而作为 SOA 基础设施的企业服务总线 ESB 在国内的应用更是稀少 主要都是银行和电信等大牌企业在使用 我算非常好彩 打工所在的公司恰好 要为客户开发一个基于 MB 和 WAS 的平台 让我有很多机会接触到 MB 的应 用 现在国内 MB 的资料非常少 主要是 IBM 的红皮书 可惜全部都是英文的 看起来颇费力 效率也不高 出版物我所知的只有一本 是陈宇翔先生所著的 精通 Websphere Message Broker 中国水利水电出版社 也是目前手 边唯一的一本参考书 因此希望将这段时间的一些使用心得记下来 作为一个 从未接触过 SOA 和 MB 甚至没用过 websphere 产品 的菜鸟 面对这个上 百万人民币的庞然大物 应该怎样下手 书评书评 先来说说这段时间翻阅的一些 MB 的书籍 包括纸质和电子版 首先是上文说到的 精通 Websphere Message Broker 这本书 本来这种书给人的第一反应就是 一本红 皮书的翻译 无非就是从 IBM 的各个红皮书里面摘抄文字 翻译好之后综合一下的 大杂 烩 老实说这本书里面的确有很多翻译的内容 比如 MB toolkit 中自带的一些教程 以 及 MB Information center 里面的部分实例 书的后半部分都是附录 包括函数库 命令库 等等 但是不可否认的是 IBM 的红皮书 InfoCenter 本身就是相当好的教程库 而这本 书用到其中的内容也翻译的流畅 所以也是方便了国内读者 而且 作者本身也的确有一 些 MB 的使用经验 书中也有他自己的内容 所以 这本书作为入门的话 实在是比较辛 苦 因为没有考虑太多初学者的难处 内容的编排也不太合理 但是作为一本参考书却是 不错的选择 在如今没什么资料的情况下 最好咬牙坚持看下去 再说说 IBM 提供的电子资源 包括红皮书和网上资料 以及 InfoCenter 只要你买了 MB 的产品 IBM 自然会提供一堆红皮书给你 当然你也可以慢慢从网上下载 这些红皮 书很多写的不错 但是要从头看太痛苦 作参考比较好 此外如果你购买 MB 的培训 那 么培训机构也会给你一些 pdf 材料 其实都是 IBM 出品的 这些材料相对易懂 适合入 门 再有就是 developerWorks IBM 的官方技术网站 里面提供最新最全的资料 有空多 去看看 也可以订阅它的邮件 最后是 InfoCenter 其实说白了是网页版的手册 可以在 线看也可以下载 相对其他来说 难度介于中等 而且不像网站的资源那么零散 所以也 是很好的提高阶段的学习资料 ESB 产品产品 如果你还不清楚 ESB 的概念 和 IBM 的相关产品 可以去 IBM 网上查查资料 作为 一个菜鸟我没法全面评论当前的 ESB 产品 只能记录一下自己的所见所闻 就是跟 IBM 和 BEA 公司打交道的时候听到的一些内容 撇开两者的应用服务器不谈 这方面的口水 战已经够多了 国内用 BEA 的相对多 容易上手适合快速开发 性价比很高 SOA 和 ESB 方面 IBM 无疑是走在前面的 这个可以从两者的产品线看出来 BEA 的 ESB 产品 只有一款 AquaLogicBus IBM 却已经开始划分各类市场 推出不同档次的产品了 但这 个也是 BEA 宣传的好处之一 买一个就能到处用 见仁见智了 其二 BEA 自己的销 售都对 AquaLogic 不甚了解 而且在国内尚无成熟应用 这点是很多企业最关注的 没有 成熟应用意味着没有好的技术支持 出了问题不知道找谁解决 甚至从没有人遇过这种问 题 而 IBM 这两年在 SOA 的推广方面做得比较好 广告也做得多 在国内已经有一些成 功案例 技术支持也更加完善 我们在广州就能直接联系到工程师 而不必等北京 上海 甚至国外的支持 MB 在对异构环境的支持方面 做得也比 AquaLogicBus 好 可以支持几十种通信协 议和平台 而且天生和 IBM 自家的大型机等结合的比较好 AquaLogicBus 支持的就相对 比较少 主要是基于 java 平台的 SOA 流行协议 比如 web service 给人感觉更像是 websphere ESB 的竞争对手 但是 BEA 的产品向来给人的感觉是除了在 IBM 的平台 其 他平台上都比 IBM 的同类产品性价比要高 不知道 AquaLogicBus 是不是也一样表现优秀 这个就需要专业的测试了 另外很重要的一点 就是 BEA 的消息中间件做得不如 IBM 的 MQ 强大 而 MB 又是 依托于 MQ 才能有如此强大的功能 这个是 BEA 的销售也不得不承认的 尽管 Web service 是当前 SOA 的主流 但是性能方面却是不敢恭维 在企业内部实施 SOA 如果服 务组件都用 web service 连接 虽然更加通用 更加廉价易用 但是往往会有性能瓶颈 关键地方还得靠消息中间件 最后呢 就是 BEA 工作人员对于自家的产品 底气明显不足 一方面是不熟悉 另 一方面也是国内用的少 也侧面反映了对于这类重量级产品 而且关乎整个系统性能的底 层部件 人们还是倾向于选择 IBM 将来 SOA 应用普及了 AquaLogicBus 肯定也会遍地 开花 就像现在的 weblogic 一样 只是目前来看 还是选择 MB 更让人放心 还有一个不得不提到的有力竞争者是来自开源社区的 JBOSS ESB 这个产品我没了 解过 但是现在 Reahat 收购了 JBOSS 在 JBOSS AS 和 ESB 上也下了相当大力气 誓 要在 SOA 市场与 IBM 和 BEA 分一杯羹 很看好 JBOSS 的潜力 只是开源产品在中国连 个服务中心都没有 暂时只能供高手们自己研究着玩了 IBMIBM MessageMessage BrokerBroker 笔记系列 二 笔记系列 二 赶在这周结束前 再写一篇 MBMB 概述概述 MB 的全称是 message broker 即 消息代理 消息 一词前几年比较火 消息中间 件也卖的很火 当时似乎 J2EE 的产品都要跟 消息 中间件 扯上点关系 以彰显潮流 我觉得初学者只需记住 消息 的异步性即可 也就是 消息 和传统的网络连接 远程方法 调用等的最大区别 就是你一旦发出消息以后 不用再管它的死活 中间件会处理一切事务 出了问题也会通知你 这样可以更好的分离业务逻辑 把消息当成邮件的话 那么传统网络连 接就是由你去送信 而中间件则好比邮局 它来提供送信服务 并且可以跨国境 跨语言 完 全不用你操心 相当于中间件可以连接异构平台 使用者只需等在家门口收信 在说 代理 之前 先讲一下 MQ 的基本概念 MQ 即 message queue 消息队列 也就是 IBM 的主打消息中间件产品 IBM 几乎所有 SOA 相关的产品 都是构建于 MQ 之上的 没有 MQ 强 大的消息传输能力 那么 IBM 很多产品都做不起来 在这里不赘述 MQ 的功能 初学者只需把 MQ 当成一个非常可靠的传输通道即可 你只要往里面放东西 MQ 就会把消息传到目的地 那有了强大的 MQ 还要 代理 干什么呢 如果你用过 MQ 或者类似的产品如 apache 的 开源 JMS 产品 ActiveMQ 就会发现 尽管用 MQ 不必考虑网络连接 平台异构 但是你在配 置的时候 以及使用 MQ 编程的时候 都要指定目的地 比如设置 IP 地址 这样的程序依旧存 在很大耦合性 万一某个组件的 IP 变了 所有跟他相关的组件都得改动 轻则修改配置文件 重则重写代码 这时 代理 的作用就开始凸显了 所有组件的 MQ 队列都可以直接连接到 MB 上 MB 相当于一个公共服务中心 MB 接收所有 消息 然后自动分析其中的内容 找到相应的目的地 进行路由转发 好比你在写信时 只需 写明收信人的姓名 身份证 哪怕收信人搬到天涯海角 只要他在 MB 邮局中登记了 那 MB 就 可以把信交给他 这样进一步地分离了业务和底层通信 我只需要知道业务概念上的 他 就可以把消息交给他 此外 MB 还可以进行消息转换 这就像是自动翻译信件 我现在可以用 中文写封信给本拉登 我不需要知道他具体藏在哪里 信件就会自动翻译成阿富汗的文字 送 到本拉登手里 所以 代理的两个核心功能就是 消息路由 和 消息格式转换 MB 本质上也是一 个服务总线 所有的服务组件接入到 MB 中 服务将消息塞给 MB MB 来决定怎么转发 这样让 服务愈加成为一个独立的实体 和其他服务的耦合性进一步降低 从而达到 SOA 的境界 MBMB 初览初览 说了那么多大道理 终于开始讲到 MB 的具体内容了 下面的图片摘自 IBM 的红皮书 是 MB 的总体架构 我粗略的描述一下 可以看到 MB 里面有两大块内容 一个是 toolkit 也就是开发环境 后面我们会讲到 还有一个是 broker domain 即代理域 代理域里面有两个核心部件 一个是配置管理器 configuration manager 一个是代理 broker 配置管理器其实很像 MQ 的队列管理器 或者是 WAS 的 deployment manager 都是起到一 个管理作用 在 MB 里当然是管理众多的 broker 了 我们平时对 broker 的管理 维护操作 其 实都是通过配置管理器完成的 代理 broker 是真正体现 MB 设计思想的地方 上面的图片中有像流程图一样的东西 即 message flow 是消息的流程图 从什么地方流进来 再从什么地方流出去 还有 message set 即消息集 说白了是描述消息长什么样子 它的结构 内容是怎样的 其实 message flow 对应了上文所说的 消息路由 而 message set 则对应 消息格式转换 你肯定要清 楚两种消息的格式 才能定义互相转换的规则 MB 的外围是各种类型的应用程序 他们接入 MB 的方式可以多种多样 可以是 Webservice 也可以是数据库 文件 HTTP 连接 等等 不一定局限于 MQ 圆柱体代表的则是数据库了 这是尽 IT 人皆知的 因为 MB 的很多信息 包括配置信息 以及 broker 的运行时信息都要通过数据库保存 broker 本身也可以操作数据库 你可以在流 程的某个节点上增删查改某个数据库 下图是 WMBT websphere mb toolkit 的界面 可以看到 WMBT 是基于 eclipse 的 所以大部分 java 开发者应该能很快上手 开发 MB 程序和开发 J2EE 程序差不多 也是先新建一个项目 然后编辑 最后部署 1 号区域是一个消息流 可以看到非常直观 从 MQ 读入 计算 转换成 web service 格式 发送 http 请求到 web service 的 url 计算 转换回 MQ 消息格式 放入 MQ 2 号区域是节点选择面板 MB 自带了几十种节点给我们选择 同时我们也可以自己创建节 点 3 号区域是属性面板 当你选择某个节点时 可以在其中编辑节点的属性 4 号区域是域连接面板 开发好的消息流和消息格式 必须首先在 MBT 中连接到对应的配 置管理器 再将打包好的流程部署到对应的 broker 中 这个过程也可以由命令行完成 5 号区域则类似 eclipse 的项目集合 里面是所有的 MB 项目 总结总结 还是打个比方 首先 我们把 MB 看做一个功能超级强大的路由器 它支持多种接入方式 也就是 MB 路由器上的端口有很多种 MQ 是比较常用的一种方式 所以 MQ 就像常用的 RJ45 接 口的 5 类双绞线 但同时 MB 还支持 JMS SCADA 等各类接入标准 在 MB 内部 我们管理员定义 好路由规则 编写消息流 其次 从 MQ 过来的信号 可以转换成其他网络协议的信号 消息 格式转换 这类似于网桥功能 可以跨越不同网络 同时 MB 的性能非常好 可以进行大数 据量交换 这一点又很像是交换机 最后 MB 可以理解业务逻辑 它的路由不仅像路由器那样 针对消息头进行路由 还可以根据消息的业务内容进行路由 酷似应用网关 IBMIBM MessageMessage BrokerBroker 笔记系列 三 笔记系列 三 安装配置安装配置 准备工作准备工作 MB 的运行依赖于 MQ 所以首先要安装 MQ MQ 的具体安装过程略 并且以后假设你已经有 关于 MQ 的基础知识 比如队列管理器 队列 通道 等等 安装好 MQ 后 创建一个队列管理器 简称 QM 名为 TESTQM MQ 里面的对象是区分大 小写的 为了避免不必要的麻烦 这里统一用大写 以下划线分隔 这个队列管理器是 MB 运 行的基础 当你用 MB 的脚本创建配置管理器 代理和执行组时 都要指定 QM 的名字 然后创建运行时数据库 名为 TESTDB MB 自带了 derby 你也可以选择 DB2 注意此处的 数据库是指 MB 自身运行所需的数据库 目前 6 1 版本只能用 derby 或者 DB2 创建的方法 可 以用 MB 的脚本命令 mqsicreatedb 也可以用对应数据库自身的脚本命令或图形界面来创建 关于关于 MBMB 的数据库 的数据库 配置管理器只能用 derby 而代理可以用多种数据库 只是不同数据库的创建命令各自不 同 包括在不同平台上也有差异 具体参考红皮书 代理的数据库可以共用 配置管理器也 可以和某个代理共用一个 derby 数据库 使用 mqsicreatedb 创建数据库时 如果你已经安装了 DB2 则默认创建一个 DB2 数据库 否则 derby 以上是为以上是为 MBMB 的运行创造运行时环境 接下来开始创建的运行创造运行时环境 接下来开始创建 MBMB 的实例的实例 首先当然是要安装 MB 了 过程挺简单的 略去不表 安装完成后 会在 开始菜单 中 有个 命令控制台 如下图 单击它 进入 MB 的一个命令控制台环境 其实和普通的 windows 命令控制台没什么区别 主要在于它帮你设好了相关的环境变量 你就可以在里面直接输入 MB 的命令脚本了 前文提到过 MB 的配置管理器是用来统一管理 MB 的各个运行时组件的 因此首先要创建 一个配置管理器 mqsicreateconfigmgr i user a password q TESTQM 指定用户名 密码和队列管理器 用户名密码是你登陆本地机器时输入的 必须要有足够 的权限 具体权限就不清楚了 我直接用管理员帐号 深入讨论请参考 MB 的红皮书 你会发现这里没有指定数据库的名称 因为配置管理器在创建时会自动新建一个 derby 数 据库 而且只能用 derby 数据库 用户无法改动 配置管理器的名称也没有指定 在 windows 下是会创建默认名称的 ConfigMgr 然后是创建代理 名为 TESTBROKER mqsicreatebroker TESTBROKER i user a password q TESTQM n TESTDB 大部分都和创建配置管理器一样 只是多了一个选项 用于指定数据库 再次提醒 必须 是 derby 或 DB2 二选一 最后 使用 mqsistart 组件名 来启动配置管理器和代理 配置配置 MBMB toolkittoolkit WMBT 本身的安装没什么特殊要求 这里就不啰嗦了 接下来的关键是在 WMBT 里面连接到刚才创建的配置管理器 其作用就好像你在 Eclipse 中要配置好应用服务器的实例 才能把你的 J2EE 项目直接以图形界面的方式部署 而不必自己 敲命令 如图 文件 新建 域连接 在弹出的窗口中 填入相关参数 这里只需填入队列管理器的名称 域名 端口 注意是队列管理器而不是配置管理器 其 实你在创建配置管理器时也没有指定端口 因为它用的就是所在的队列管理器的端口 此外对于 SVRCONN 通道名 SYSTEM BKR CONFIG 是在你创建配置管理器时自动生成的 可 以在 MQ 资源管理器 中 通过 显示系统对象 来查看 你也可以自己建一个服务器连接通 道 然后在这里输入该通道的名字 一切正常的话 就能看到左下角的 域 窗口中 多了一个新的域连接 里面以树形结构显示了你刚才创建的代理 前提是你的代理基于 derby 数据库 如果基于 DB2 则需要在域连接那里显式增加 代理引用 现在你可以右键 单击 TESTBROKER 然后创建执行组 等你开发好 MB 项目后 打个包 拖 到执行组里面 就可以部署了 IBM MessageBroker 笔记系列 四 笔记系列 四 前面讲了那么多 MB 的原理和配置 这一篇 blog 开始正式讲讲我个人学 MB 的感受 假如时间可以重来 我会怎样利用手头的资源 以最快的速度 入手 体验体验 MB 在安装完 WMBT 之后 会出现 欢迎 这个也是 eclipse 环境安装后都会 有的东西 你也可以在 帮助 欢迎 里面找到 里面有不少很浅显的例 子 让你对 MB 是如何工作的有个感性认识 强烈建议把里面的 入门 部分 看完 学习开发学习开发 看完 入门 后 重点就应该放在 样例 中 在样例库里面 有数十个 基础的样例 每个样例都针对某类节点 比如消息映射 JMS 数据库操作 Webservice 调用 等等 那么多的例子 当然不可能一下子看完 而且对于一 张白纸的新手 里面有些基础知识还不懂 我的建议是 结合之前提到的那本 书 精通 Websphere Message Broker 看完一方面的内容 比如数据库操作 你就可以打开 样例库 将里面的数据库样例导入至 WMBT 然后看看其中 的 ESQL 代码 相关节点的设置 等等 一开始会比较枯燥 而且让这些样例 跑起来也不是件容易的事情 但坚持下去就会慢慢体会到其中的乐趣了 掌握掌握 Debug 利器利器 一般来说 WMBT 会自动帮你配置好样例程序运行所需的环境 比如创建 队列管理器 数据库 等等 然后将样例部署到 MB 的执行组中 这一切都是 自动完成的 但有时候出于各种原因 试运行样例的时候不能得到预期的结果 首先排除掉打包和部署时的错误 因为样例程序的源代码通常是没有问题的 那么余下的问题就只能靠 debug 来解决了 另一方面 当你看了书之后 对 InputRoot Environment ExceptionList 这些东西的结构 细节肯定会很好奇 但是书中提到的很少很零散 最好的方法就是在 debug 模式下 让消息流挂起 在某一点 然后你再慢慢浏览其中的各类变量 很多东西都不言自明了 用 IBM 工程师的话说 就是 没有 debug 就根本没法学会 MB 为什么 相关资 料太少了 去 google 有时候还不如直接问 MB 自己 所以也是很考验你的自学 能力的 配置配置 debug 环境环境 这些内容在 精通 那本书中都有讲到 只是比较粗略 我在这里补充我 个人的经验 首先右键单击某个执行组 属性 在 JVM 调试端口 中输入一个 tcp 端口号 不要和其他程序冲突就行 假设 9090 再次右键执行组 调试 启用调试 9090 然后 切记 重启执行组所在的 broker 重启后 把 bar 文件部署到该执行组 然后进入 debug 视图 找到下图 右下角的那个按钮 如果是该按钮是红色的 说明 debug 守护程序没有启动 如果是绿色的 鼠标移过去 会显示 debug 守护程序正在监听 XX 端口 需要注意的是 这 里的端口可不是之前在执行组设置的端口 刚好相反 必须和之前的 9090 不同 单击旁边的下拉箭头 可以启动或者更改守护程序的端口 这里改为 9099 不 必重启 接下来 就和一般的 eclipse 调试一样了 在绿色的小昆虫按钮设置 debug 参数 新建一个 debug 注意这里的 java 调试端口 则必须与执行组的一致 你也可以 选择执行组 系统会根据你选择的执行组 自动设置端口 然后 在 源 选项卡中 添加你要调试的项目 确定之后 就可以运行 debug 了 What next debug 配置成功后 就开始慢慢研究那些样例吧 按照之前我说的思路 书本 样例 按照每个人自己的学习习惯和项目开发的需要 将你要学习的 样例 一步步调试过去 看看每条 ESQL 语句的结果 很快的你就知道其中的 运行机理了 小结小结 由于 MB 不能像 java 那样 输出东西到控制台 只能输出到日志文件 而 且还得写一堆语句 或者配置 trace 节点 很麻烦 所以传统的在程序中插入输 出语句的方式在这里没太大意义 很多情况下 要依靠 debug 来观察消息流执 行过程中消息的变化 来决定 bug 的所在 IBM MessageBroker 笔记系列 五 笔记系列 五 学习资源学习资源 专门整理一下最近用到的一些学习资源 并稍作评论 一 一 精通精通 Websphere Message Broker 其实对这本书 我是爱恨交加 一方面 它是仅有的一本中文的纸质图书 也是我翻得 最多的一本参考书 另一方面 它也就是参考书 作为入门的图书太难了 编排也不怎么样 但是总的来说 开发 MB 还是少不了它呀 当你要查某个节点的用法 某个 ESQL 函数的参数 大部分人还是倾向于翻书而不是翻一堆英文资料吧 二 二 Websphere Message Broker InfoCenter 这个东西的使用频率是仅次于上面那本书的 比起书来说 有哪些好处呢 首先是内容 量大而且全 几乎你要找的所有信息都能在里面找到 此外 电子资源的一大好处是可以搜索 可以用金山词霸 对于一些书上没有的或者你根本不知道躲在哪个角落的信息 用这个最方便 了 但是不足之处也显而易见 首先是全英文 看起来比较费力 另外是对着屏幕上一页页 的英文看半天 个人感觉对眼睛很不好 很费精力 三 三 IBM 技术支持技术支持 IBM 的服务分为收费与免费两种 当你购买了相关产品后 就能获得相关的技术支持 一般是指派一两个售后工程师 你可以随时联系他们 包括手机和电邮 当你在开发中遇到问 题时 大可不必客气地狂问他们问题 能不能给你个满意的答复就看情况了 因为有些问题不 面对面交流是无法描述清楚的 而要他们过来你这边通常需要预约 IBM 的工程师都很忙 貌 似事情特别多 三天两头开会 培训学习什么的 而且 作为专业服务队伍的一大特点 就是只负责他熟悉的产品 假如你的问题是 MB 和 spring 里面某个东西通过 MQ 互联失败 那他们首先会尝试解决 MB 这边的问题 如果不 行 那就不好意思了 spring 不是 IBM 的 同时也不是我熟悉的 你去找 spring 的厂商吧 或者还可以给你一个 MQ 工程师的联系方式 其实很多这些问题都是要联调的各方一起解决 的 只是 如果你真要这么做 先掏服务费吧 因为这种问题涉及到具体项目开发 IBM 可不 是慈善机构 还有一种情况 就是 IBM 的工程师也不曾遇过的问题 比如某些产品的新特性连他们都 没有被培训过 那就比较痛苦了 所以要找其他方法 总不能干等到他们学习完了再来指导你 吧 四 四 MQSeries 论坛论坛 这个论坛特别好 囊括了 IBM MQSeries 的所有产品 里面有专门的 WMB 区 很多高手 在里面回答问题 我甚至觉得 真想深入研究 MB 平时可以多去那里逛逛 上次关于 webservice 的一个问题 IBM 的技术支持都不清楚 因为是 6 1 版本的新特性 最后还是这里 的高手解答的 这是国外的一个论坛 发帖看帖之余 还能练习英文 何乐而不为呢 五 五 IBM 网上资源网上资源 这个的范围比较广了 从红皮书到 developerWorks 社区 里面有很多你想要的东西 只 是 dw 社区的文章中英文混杂 找起来比较费力 个人还是把这里当成学习的地方而不是紧急 时候的参考资料 闲暇之余在这里浏览那些 IBM 专家发的文章 不仅图文并茂 版面工整 文 章质量高 水平也由浅及深 各种层面的都有 实在做得很不错 建议我们这些菜鸟或者技术 狂去订阅 dw 的邮件吧 经常会发送 新手入门 之类的电子杂志 小结小结 暂时用到想到的就这些了 MB 的确不好学 不然 IBM 也不会把培训和服务费收这么贵 了 可见 IBM 真是很狡猾 把软件做得难用又不肯出一些系统的基础教材 摆明是要宰你一笔 呵呵 如果你也对 MB 有研究 欢迎一起探讨 交流更多好用的资源 可以省钱 IBM MessageBroker 笔记系列 六 笔记系列 六 前面几篇笔记 都是讨论 MB 是什么 怎么配置 怎么 debug 以及一些 学习资源和心得 接下来的几篇会针对 MB 开发中一些常见的问题 分门别类 进行归纳总结 包括数据库 WebService ESQL 语法细节 等等 这些细节 问题都是我本人在这两个月的开发过程中遇到的 相信对很多新人都有借鉴作 用 数据库操作数据库操作 配置配置 MB 的用户数据库的用户数据库 前面已经讲了在创建 MB 运行时实例时 配置数据库的基本过程了 但那 里所指的数据库是 MB 自己运行时需要的数据库 用来存放诸如 broker 执行 组 消息流等的信息 而现在开发的企业应用程序 几乎没有不用到数据库来 存放业务数据的 所以这里主要讲述如何配置 用户数据库用户数据库 也即你的应用程 序使用的数据库 下面以 MB 6 1 Oracle 10g 为例 介绍配置过程 一 一 ODBCODBC 数据源数据源 MB 是通过 ODBC 来操作数据库的 因此首先要配置好操作系统本身的 ODBC 数据源 Windows 中配置 ODBC 很容易 在此不赘述细节 需要注意的是 选择 Oracle 数据源驱动时 一定要选择下图所示的 MB 自带的 Oracle 驱动 我在创建 ODBC 时 一开始没有在本机安装 Oracle 结果 ODBC 无法使用 报告 由于系统错误 126 驱动程序无法加载 问了 IBM 的技术支持也没有答 案 后来干脆在本机安装了一个 Oracle 不必运行 问题就解决了 估计 MB 自带的 Oracle 驱动还是要调用 Oracle 本身的一些库的 我对 Oracle 本身基本 不懂 具体用到了哪些库也不清楚 就先这么用着了 二 二 数据库设置数据库设置 这里顺手提一下 Oracle 本身的设置 当你新建了 Oracle 的 ODBC 数据源 后 会发现数据源设置里面 没有 IP 和端口设置 我在网上搜了一下 最简单 的方法是直接修改 Oracle 的 tnsnames ora 文件 这个文件位于 oracle root product 10 1 0 db 1 NETWORK ADMIN tnsnames ora 路径下 可以用记事本打开编辑 里面本身已经有样例了 参照着改很容易 三 三 消息流节点消息流节点 MB 中能和数据库打交道的节点有很多 包括 filter compute 和专门的 数据库节点 如下图 基本上 凡是属性里面可以设置 数据源 的节点 都可以操作数据库 使用方法很简单 直接在 数据源 属性中填入操作系统的相应 ODBC 数据源名 称即可 四 四 代理代理 brokerbroker 的设置的设置 这是最后一处要设置的地方 前面的 tns 文件解决了 ip 和端口的问题 但是数据源本身的用户名和密码在消息流中并没有提及 其实这是通过 MB 的一 个命令来设置的 格式如下 mqsisetdbparms brokerName n dataSourceName u dataSourceUserId p dataSourcePassword 具体用法可以输入 mqsisetdbparms h 获得参考 配置完以上内容后 运行消息流应该不会有数据库连接的异常了 假如配 置不正确 会在运行到使用了 数据源 的节点处抛出 ODBC 的一些异常 在在 WMBTWMBT 中创建数据库项目中创建数据库项目 以上做的工作可以确保消息流能够正确操作用户数据库 但是当你在 WMBT 中编写 SQL 语句时 会出现很多警告 内容一般是 无法解析数据库表引用 某字段 虽然不影响运行 但看着总是不太爽 出现警告的原因很简单 你没有告诉 WMBT 你需要用到的数据库表的结构 是什么 所以 WMBT 很尽职地告诉你可能有问题 我们只需引入数据库的定义 即可消除这些警告 首先 打开 数据库资源管理器 视图 新建一个 JDBC 连接 和其他 EclipseIDE 类似 配置好相关参数即可 在 WMBT 中新建一个 数据库定义 向导会让你顺便创建一个 数据库设 计项目 你可以通过刚刚创建的 JDBC 连接 选择一个数据库 即可 这时你会发现 ESQL 代码中那些烦人的提示已经消失了 在在 ESQLESQL 中编写中编写 SQLSQL 语句语句 ESQL 中使用 SQL 和一般的 SQL 语句基本一致 除了在指定哪个数据表的时 候 要用类似下面的语法 SELECT FROM Database SchemaName TableName 其中的 Database 是关键字 一定要有的 表示从数据库中读取 这是 因为 ESQL 中不单可以操作数据库 还可以对逻辑树 数组对象使用 select delete 等 SQL 语法 Database 起到标识的作用 给出这样一条语句 set LocalEnvironment temp select from Database TEST example 假设 example 有 id 和 info 两个字段 共三条记录 那么执行后的结果是 LocalEnvironment 树下面产生三个 temp 元素 每个元素都包含一个 id 和 info 子元素 对应数据库的记录 select 返回的都是数组类型 因此不能 set LocalEnvironment temp select 那样会在打包时报错 一定要标明是数组 此外 像上面那样直接书写 SQL 语句并赋值给一个数组变量 MB 会在编译 和执行期间检查 SQL 语法是否合格 这个特性虽然很有用 但有时候也会适得 其反 比如要在 Oracle 使用序列来实现主键自增时 insert 语句要写成 insert into example id info VALUES SEQ EXAMPLE nextval xxxxx 这里 SEQ EXAMPLE 是序列的名称 而在 MB 里面这样会保存 提示找 不到 SEQ EXAMPLE 这个对象的定义 解决方法是使用 ESQL 的 PASSTHRU 函数 这个函数直接将 SQL 语句发送给数据库去解析执行 就可以绕开 MB 的 检查 IBM MessageBroker 笔记系列 七 笔记系列 七 这篇是针对 WebService 的一些使用技巧 入门入门 MB 对 WebService 的支持其实不是它的强项 它的长处在于 MQ MB 就是基于 MQ 的 所谓 消息代理 感觉就是在消息中间件 基础上增加了 代理 功能 MB 的前身是 MQ Integrator 所以从字面 意思上来看 也是 message integrator broker 越来越复杂的功能 据说 Websphere ESB 对于 java 和 webservice 的支持更加完善 不过我 也没有用过 扯了那么多 回到主题 在 MB V6 0 中 对 WebService 的支持还是比较 弱的 以单纯的 http 节点 加上程序员在 compute 节点中手工操作消息树 包 括对 SOAP 包进行封包 envelop 和解包 extract 都要自力更生 难度比较 大 且不够直观简练 给人感觉是 MB 对 webservice 支持不够 不得已而为之 到了 V6 1 情况终于有了较大的改观 MB 提供专门的 webservice 节点了 所以 如果你还在看 精通 WMB 那么 webservice 那一章可以先放下了 去 WMBT 的 样本库 看看 webservice 的教程 会发现不仅仅有专门的 SOAP 节点 还对 IBM 的 WSRR 也有专门的支持 甚至还提供异步的 SOAP 节点 因此 在 MB 中使用 webservice 第一步推荐先去学这些样例 特别留意使用 http 和 soap 节点时 前后的 compute 节点的 ESQL 代码的差异 体会 SOAP 节点的方便 技巧技巧 看完 SOAP 节点的样例之后 会发现里面的那个子流 其实也挺复杂的 好像不比 http 节点简单 httphttp 节点节点 SOAPSOAP 节点节点 其实 Envelope 和 Extract 节点是 MB6 1 才有的 没有他们 http 节点 构造 webservcie 会变得很啰嗦 另外 以上的流程图 是可以通过向导的方式 生成的 这一点非常方便 首先在消息集项目中 从 WSDL 文件 新建一个消息定义 然后将这个 WSDL 文件拖到某个消息流的编辑界面中 自动弹出一个向导 简单地一步步走 就能生成以上的消息流 动态设置动态设置 webservice 地址地址 在以上生成的消息流中 HTTP 节点和 SOAP 节点都有一个属性 用于指定 webservice 的请求地址 但这是写死在节点中的 如果要在运行过程中动态设 置呢 比如根据消息内容 选择合适的 URL 地址进行 webservice 调用 其实很简单 只需在 SOAP 或 HTTP 节点之前的某个 compute 节点中 在 LocalEnvironment 中设置一个相应的值即可 HTTP 节点 SET OutputLocalEnvironment Destination HTTP RequestURL webservice 地 址 SOAP 节点 set OutputLocalEnvironment Destination SOAP Request Transport HTTP WebServiceURL webservice 地址 注意 切记把 compute 节点的 计算方式 设置为 消息和 LocalEnvironment 总之至少要包括 LocalEnvironment 否则设置了等于没 设置 compute 节点不会将LocalEnvironment 往下传 当然 以上步骤也可以在 Filter Database 这些节点做 那样就没有 Input 和 OutputLocalEnvironment 之分了 IBM MessageBroker 笔记系列 八 笔记系列 八 本来这一篇要写 ESQL 的一些语法细节的 但是过几天就要去客户那里部署系 统了 上周也花了一个礼拜时间 一边学 linux 一边学怎么在 linux 上部署 MB 所以这一篇先讨论如何在 linux 上安装 配置 WMB 准备准备 先说一下硬件和操作系统环境 机器 IBM 的某型号刀片机 4G 内存 操作系统 RED HAT LINUX 64bit 企业版 业务数据库 Oracle 10g WMB6 1 安装在 WMQ6 之上 使用 DB2 9 作为代理数据库 以上软件都是安装在同一台刀片机上 另外 WMBT6 1 安装在我自己的 windows 机器上 用于开发 MB 程序 并远程部 署到服务器上 参考资料参考资料 按理说参考资料应该是放在最后面的 只是我的这些安装心得都是来自这些参 考资料 为防止我的个人经验误导读者的安装过程 所以先列出以下资料 有 空慢慢看的话 还是应该以这些官方资料为准 messagebroker Configuration Administration and Security 这本是权威了 除了对应的版本有些旧 WMB 6 0 整体内容还是很详细的 几乎所有平台上的 MB 安装 配置都有详细的介绍 只是内容多得让人看起来眼 晕 MB info center 内容和上面那本书差不多 比较精炼 但如果配置出了问题 未必能找到详细 的解答 最后 强烈建议 如果是 linux 菜鸟 像我这种 赶紧补习一些 linux 的基 本知识 比如环境变量怎么设置 安装安装 其实安装过程还是比较简单的 先安装 MQ 再安装 MB MQ 比较麻烦一点 要 用 rpm 而 MB 则带有一个 Eclipse 的安装界面 和 windows 上和相似 跟着向 导走就行了 安装好之后 会发现 db2 也随着 MB 一起装好了 默认安装路径 注意大小写 MB opt ibm mqsi DB2 opt ibm db2 创建代理数据库创建代理数据库 红皮书上已经有详细说明 我就偷个懒 copy 并解释一下 1 Log on as root 2 Create a database instance Use the commands shown here for guidance for the different platforms a On AIX usr lpp db2 08 01 instance db2icrt u fence userID username b On Linux Solaris or HP UX opt IBM db2 V8 1 instance db2icrt u fence userID username 其实 fence userID 和 username 我也不太清楚是什么 你可以参考红皮书 或者找个 db2 高手问问 反正我当时使用 root 创建是不行的 一定要选择其他 帐号 比如你自己的用户名 3 Log on as username 4 Create a database in this example called WBRKBKDB using the following commands on some platforms an explicit path name is required You must insert a space between the starting period and the tilde character in the first command shown here sqllib db2profile db2start db2 create database WBRKBKDB db2 connect to WBRKBKDB db2 bind sqllib bnd db2cli lst grant public CLIPKG 5 重点说明的是 sqllib db2profile 这句命令 前面要有一个 和空 格 否则没用 执行了这条命令后 如果你对 db2 命令不熟悉 可以直接敲入 db2cc 启动 db2 的图形管理界面 在里面创建数据库 省去了敲命令的麻 烦 最后一步 在某些平台上需要修改 db2 的 DBHEAP 属性 至少 900 才能满足 MB 运行的需要 否则会造成性能低下 配置配置 ODBC 连接连接 由于在 64 位机器上跑 MB 所以 ODBC DSN 是要 32 位还是 64 位是很头疼的问题 因为不同硬件平台 操作系统的组合都有不同的要求 比如 在 windows 上是 肯定没有 64bit 支持的 而在某些操作系统 貌似是 AIX 即使你全部用 64bit 的产品 也要配置 32bit 的 ODBC 具体的可以参考红皮书 里面有详细 的列表 在这里我只针对我使用的平台介绍配置过程 在此特别声明 未必适 用于读者的环境 总体思路 linux 的 ODBC 是通过一个配置文件来描述的 在该配置文件中写入 相应的信息 然后在环境变量中设置 ODBCINI 配置文件的绝对路径 编辑 ODBC 配置文件 1 从你的 MB 安装目录下的 ODBC64 V5 2 拷贝一份样例配置文件 odbc64 ini 到某个目录 比如 mqm 用户的根目录 2 修改该文件 在这里我只保留 DB2 和 ORACLE 的 DSN 其他的统统删了 3 修改你的 odbc64 ini 的权限 Ensure that the odbc64 ini file has file ownership of mqm mqbrkrs and has the same permissions as the supplied sample file 4 修改 ODBCINI 环境变量指向你的 odbc64 ini 5 修改 linux 的库路径 LD LIBRARY PATH 指向 db2 和 oracle 的 32 位 和 64 位 odbc 链接库的路径 比如我的配置如下 LD LIBRARY PATH ORACLE BASE lib32 DB2 BASE lib32 DB2 BASE li b64 LD LIBRARY PATH 6 如前所述 我对使用 32 还是 64bit 的 DSN 也是有点混乱 干脆就把下 面两个环境变量也加上 以防万一 for MB 64bit execution group MQSI LIBPATH64 opt ibm db2 V9 1 lib64 MQSI LILPATH64 32bit database lib may be needed MQSI LILPATH32 opt ibm db2 V9 1 lib32 MQSI LILPATH32 7 最后是修改 odbc64 ini 文件的内容 具体的看书吧 下面是我的例子 补充几点注意的地方 1 DB2 的 driver 是不用路径的 只写驱动名字即可 2 DB2 的 Database 属性 即是数据库的名字 要和 DSN 的名字一样 即 是方括号中的内容 3 没事不要打开 trace 会很慢 创建创建 MB 的运行实例的运行实例 准备工作准备工作 打开一个终端 运行命令之前 先输入 opt ibm mqsi 6 1 bin mqsiprofile 和前面的 db2 命令一样 开头要有 和 空格 你可以把这句话加到 linux 用户根目录的 bashrc 文件 那样每次打开终端 都会自动执行这个脚本 以设置一些环境变量 否则你是无法使用 MB 命令的 确保确保 MQ 和和 DB2 都在运行都在运行 可以通过 dspmq 查看 MQ 组件的运行状态 如果队列管理器没有启动 则通过 strmqm 命令启动之 按照前面介绍的方法 利用 db2cc 图形界面查看数据库是否运行 否则启动之 也可以用 db2start 命令 记得要切换用户到你创建 db2 时使用的帐号 比如 su db2usr c db2start 创建配置管理器创建配置管理器 mqsicreateconfigmgr ConfigMgr i root a xxxxx q QM 创建代理创建代理 mqsicreatebroker BRK1 i root a xxxxx q QM n BRK1 DB u db2usr p xxxxx 创建代理时 要指定代理数据库的 DSN 名称 同时指定连接 ODBC 的数据库用户 名密码 如果一切 ok 创建好代理后 在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论