扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:论坛整理 2007年12月24日
关键字: IBM WebSphere 简介
在本页阅读全文(共19页)
问题:自动化孤岛
在大多数业务中,业务的信息技术 (IT) 基础结构中存在许多不同的技术。系统由这些来自许多供应商的不同的技术组成,并且具有不同的硬件平台、编程语言、操作系统和通信链路。通常,连接不同的系统非常复杂并且可能代价高昂,所以许多系统之间都相互隔离。
目前,越来越多的业务还需要以电子的方式与其客户和供应商进行通信,而这些客户和供应商可能比该业务本身使用了更多不同的技术。因此,需要某种简便的、廉价的和可靠的机制用来连接这些异类的系统(“自动化孤岛”),以便在内部和外部对业务的 IT 基础结构进行集成。
解决方案:WebSphere MQ
通过提供一种程序到程序的通信方式,WebSphere MQ 非常适合于上面所描述的环境。图 1 显示了这种通信方式的基本机制。
图 1. 程序到程序的通信
程序 A 准备好一条消息,并将其放入队列。然后,程序 B 从该队列中获取消息,并对其进行处理。这两个程序都使用一种应用程序编程接口 (API) 与该队列进行交互。WebSphere MQ API 称为消息队列接口 (MQI)。任何一个程序都无需了解对方的存在,并且这两个程序无需同时执行。如果程序 A 在程序 B 尚未执行的时候将一条消息放入队列,那么该队列将存储这条消息,直到程序 B 开始执行并准备处理这条消息。类似地,当程序 B 从队列中检索消息时,程序 A 可能已经不再处于执行状态。
应用程序设计
使用 WebSphere MQ 提供的基本通信机制,可以进行同步和异步的应用程序设计。
在同步的应用程序设计中,如图 2 所示,假定同时执行这两个应用程序。程序 A 向队列 1 发送一条消息并等待应答。程序 B 检索得到该消息,并对它进行处理,然后将应答消息发送到队列 2 中,以便程序 A 进行检索。在使用 WebSphere MQ 设计应用程序时,通常每个程序使用不同的队列向其他程序发送消息。虽然这不是必需的,但这样可以提供更简单的应用程序设计和编程逻辑。另外请记住,这里假定两个程序同时执行。如果当程序 A 发送消息时,程序 B 没有执行,那么程序 A 将阻塞,直到程序 B 启动并对消息进行处理。这是同步应用程序通信中的设计问题。
图 2. 同步应用程序设计
在异步应用程序设计中,如图 3 所示,程序 A 再次将消息放到队列 1,以便程序 B 对其进行处理,但现在,程序 C 与程序 A 进行异步地操作,它检索消息并对其进行处理。通常,程序 A 和程序 C 是相同应用程序中的不同部分。
图 3. 异步应用程序设计
对于 WebSphere MQ 来说,异步设计是一种非常合适的模型。程序 A 将消息放到队列中,并继续执行,即使程序 B 并不对这些消息进行处理,也是如此。在这种情况下,队列将存储这些消息,直到程序 B 重新启动。这种模型有一种变种,即程序 A 将一条或多条消息放到队列中,并继续进行其他的处理,然后返回来检索和处理应答消息。
程序之间的这种通信方式称为消息传递。它与其他通信方式(如对话式的通信或调用和返回通信)的不同之处在于,进行通信的程序之间具有时间独立性。程序接收消息作为输入,并输出其结果作为消息,而不需要同时运行发送或接收程序。
队列管理器和 MQI
WebSphere MQ 中的队列由队列管理器 所拥有并进行管理。队列管理器还为应用程序提供了 MQI API,允许它们访问队列以及其中包含的消息。MQI 在 WebSphere MQ 支持的所有平台中保持一致,并对应用程序隐藏了队列管理器的实现细节。
MQI 中有 8 种主要的调用:
MQCONN——连接到队列管理器
MQCONNX——使用连接选项连接到队列管理器
MQDISC——断开与队列管理器的连接
MQOPEN——打开队列以便进行访问
MQCLOSE——关闭访问的队列
MQPUT——将一条消息放入队列
MQGET——从队列中获取一条消息
MQPUT1——打开队列,放入一条消息,然后关闭该队列
MQI 中有 5 种次要的调用:
MQBEGIN——开始一个工作单元
MQCMIT——提交一个工作单元
MQBACK——回滚一个工作单元
MQINQ——查询 WebSphere MQ 对象(队列是一种 WebSphere MQ 对象,队列管理器是另一种对象)的属性
MQSET——设置 WebSphere MQ 对象的属性
消息
WebSphere MQ 中的消息包含两个部分:WebSphere MQ 使用的 Header 和应用程序数据。图 4 显示了一条 WebSphere MQ 消息。
图 4. WebSphere MQ 消息
应用程序数据可以包含任何字节序列。它是使用 WebSphere MQ 与其他应用程序进行通信的应用程序所私有的,并且对 WebSphere MQ 没有什么意义。对于应用程序数据的内容没有任何限制,但不同的平台所允许的消息的最大长度有所不同。在大多数系统中,最大长度为 100MB,但有些系统的最大长度为 4MB。
消息中可能包含各种各样的 Header,但所有的消息都包含一个称为消息描述符 (MQMD) 的 Header。其中包含了关于该消息的控制信息,队列管理器和接收应用程序将使用到这些控制信息。稍后将提供关于 MQMD 和其他 Header 的更详细的信息。
本地和远程队列
队列管理器可以位于相同或不同的计算机上,它们可以彼此通信,并在不同队列管理器的队列之间传递消息。队列管理器为消息提供了可靠的传递。例如,当应用程序将消息放入到队列中时,队列管理器将确保消息的存储是安全的、可恢复的,并向接收应用程序传递一次且仅传递一次,即使必须将消息传递到另一个队列管理器所拥有的队列,也是如此。
当应用程序打开队列时,应用程序所连接的队列管理器将确定该队列是队列管理器所拥有的本地 队列,还是由另一个队列管理器所拥有的远程 队列。对于本地队列,直接将消息放入到该队列。如果队列是远程的,那么队列管理器将消息放到一个称为传输 队列的特殊队列。
然后,消息通道代理 (MCA) 从传输队列中获取消息,并将其通过网络发送到接收端的 MCA。接收 MCA 将该消息放到目标 队列。在将消息放到目标队列中之后,便将其从传输队列中删除。消息流在队列管理器之间可以是双向的,如图 5 中所示。
图 5. 发送消息
如果接收 MCA 不能将该消息放到目标队列中,那么将根据消息描述符中的选项对其进行处理。可能将其放到死信 队列,也可能将其返回给发送者,甚至将其丢弃。
通过这种在队列管理器之间传递消息的能力,WebSphere MQ 提供了两种重要的优点:
应用程序开发人员不需要了解网络的详细信息。
MCA 可以使用各种网络和通信协议与其他的 MCA 相互通信,并且甚至可以在一段时间之后更改所使用的协议。但是,应用程序开发人员仅需要了解与队列管理器通信所需的 MQI 调用。
仅需要建立更少的通信链路。
许多应用程序使用一个队列管理器,它们可以与使用另一个队列管理器的应用程序通信,但是在一对 MCA 之间只需要一条通信链路。
设计可能性
现在您已经比较清楚地了解了 WebSphere MQ 的工作方式,即使仅仅是在概略的层次上,下面让我们来看看在使用 WebSphere MQ 设计系统时,应用程序设计的可能性。
并行处理
要完成总体的业务事务,应用程序可能需要执行多项任务。例如,旅行社可能需要预定航班、预订酒店房间和预订出租车。使用 WebSphere MQ,可以将请求消息放到为航班预定系统、酒店预订系统和轿车出租应用程序提供服务的 3 个队列中。每个应用程序都可以与其他两个应用程序并行地执行自己的任务,然后将应答消息放到旅行社应用程序提供的队列中。在收到这 3 个应答之后,旅行社应用程序可以生成综合的旅行路线。这种并行处理的方式可以极大地提高整体性能。
客户端/服务器处理
另一种应用程序设计方案是客户端/服务器处理。在这种情况下,一台服务器仅使用一个队列接收来自多个客户端应用程序的消息。每个请求消息的消息描述符可以指定一个应答队列。在服务器完成对消息的处理之后,它将应答消息发送到消息描述符中指定的应答队列,这样可以使得每个客户端应用程序相对于其他客户端应用程序独立地接收到其应答消息。
消息描述符中还有一个包含消息标识符的字段。应答消息的消息描述符可以包含对应的请求消息的标识符。这样做使得客户端应用程序可以在应答消息和以前发送的请求消息之间进行关联。
要使用客户端/服务器处理来提高应用程序的性能和可靠性,可以使用多个服务器应用程序实例为同一个请求队列服务。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者