内容


使用 WebSphere Message Broker 集成 TCP/IP

TCP/IP 通信协议

TCP/IP 是用于在两个应用程序之间传输数据的通信协议,这两个应用程序可以运行在通过网络相连的不同计算机上。TCP/IP 协议是一个用于低带宽应用程序的快速联网选项,适合用于小型设备或成本与所传输的数据字节有关的传输场景。数据传输可以是双向的,数据传输的顺序也可以保持。然而,该协议存在以下一些限制:

  • 非事务性 —— 发送方和接收方之间不存在事务协调。
  • 非持久性 —— 数据被写入到发送方和接收方之间的一个内存缓冲区。
  • 缺乏内置安全性。
  • 缺乏标准的方式标识一条消息的开始和结束。

由于存在上述限制,人们开发了一些更高级的消息传递协议并在 TCP/IP 栈上运行,如 HTTP 和 MQ,当然,这些解决方案并不是总是可行。如果一个现有的应用程序使用原始的 TCP/IP 套接字传输数据,并且其接口是不可更改的,那么要扩展连接功能的一个好方法就是使用 IBM® WebSphere® Message Broker(以下简称 Message Broker)及其 TCP/IP 节点。可以将 Message Broker 添加到使用 TCP/IP 实现传输功能的系统中,从而生成一种更灵活的组件通信架构,如下图所示。例如,在客户端或服务器应用程序都有可能暂停服务的情况下,保持 Message Broker 在线是一种更简单的解决方案。另一个使用 Message Broker 的例子是将它作为一个路由器来集成两个系统,同时不需要对其现有接口进行任何更改。

图 1. 将 Message Broker 添加到使用 TCP/IP 实现传输功能的系统中
将 Message Broker 添加到使用 TCP/IP 实现传输功能的系统中
将 Message Broker 添加到使用 TCP/IP 实现传输功能的系统中

Every TCP/IP 连接具有一个服务器端和一个客户端,其中,服务器应用程序侦听给定端口上的连接,而客户端应用程序请求来自服务器应用程序的连接。

许多系统和应用程序都遵循一个架构模型,在服务器和客户端之间划分提供功能的职责。这种分布式的应用程序非常有用,因为客户端和服务器可以安装到不同的硬件和不同的物理位置,从而能够根据最佳处理能力实现工作负载分担。在这种架构中,通常有一个或多个客户端与同一个中央服务器通信,中央服务器驻留在一个不同的主机上。客户端从服务器请求数据,服务器然后进行响应。

在出现面向消息的中间件(例如,WebSphere MQ 之类的产品)之前,传统的客户端/服务器架构以同步方式运行,两者同时在线。架构的服务器端将代表客户端执行一项任务,因此,当客户端通过网络发送请求时,客户端与服务器的交互就已经开始。服务器端然后对请求进行处理,然后向客户端发送响应。这种架构的一个常见例子就是 Web 浏览器,当通过 HTTP 请求 URL 时,Web 浏览器就相当于一个客户端。Web 服务器随后通过提供 Web 页面的 HTML 进行回应。

TCP/IP 获得一个客户端套接字和一个服务器套接字。套接字由操作系统提供,用于通过 TCP/IP 协议栈检索数据并提供给一个正在运行的进程或应用程序。套接字的地址由主机的 IP 地址(或主机名)和端口号组成。TCP/IP 套接字是连接两个应用程序的最简单的方式之一。套接字的服务器端是在运行服务器应用程序的机器上创建的,服务器应用程序获得一个端口并在该端口上侦听来自客户端应用程序的连接。客户端通过机器地址和端口号连接到服务器。客户端可以位于任何机器上,只要该机器能够通过网络访问运行服务器的机器:

图 2. 客户端和服务器应用程序之间的连接
客户端和服务器应用程序之间的连接
客户端和服务器应用程序之间的连接

图 2 显示了双向客户端/服务器连接。服务器端口仍然可以接收来自其他应用程序的客户端连接,如图中黑色圆圈和短划线所示。

图 3 中的架构图显示了客户端和服务器应用程序如何访问具有输入和输出流的套接字。套接字的客户机端在运行客户端应用程序的机器上创建,该客户端应用程序获得一个端口并在该端口上侦听来自服务器应用程序的连接。一旦服务器发起连接后,服务器和客户端都可以使用套接字发送和接收信息。套接字的输出流将成为服务器应用程序的输入流,反之亦然。

图 3. 客户端套接字和服务器应用程序之间的连接
客户端套接字和服务器应用程序之间的连接
客户端套接字和服务器应用程序之间的连接

WebSphere Message Broker TCP/IP 节点

WebSphere Message Broker V6.1 提供了 6 个新的节点,使流程开发人员能够访问 TCP/IP 输入和输出流。在访问数据流方面,客户端节点和服务器节点具有相同的功能 —— 它们的主要功能差异是一个使用客户端连接,另一个使用服务器连接。Message Broker 提供了两个输出节点:TCPIPServer 和 TCPIPClient。这些节点都被放在了消息流的末端,分别用于向 TCP/IP 客户端应用程序和 TCP/IP 服务器应用程序发送数据。Message Broker 还提供了两个接收节点:TCPIPServer 和 TCPIPClient。这些节点被置于消息流的中部,接收到达已建立的连接的数据。

图 4. Message Broker TCP/IP 节点
Message Broker TCP/IP 节点
Message Broker TCP/IP 节点
  • TCPIPClient Input 节点 —— 允许您启动一个消息流,从连接到一个服务器应用程序的 TCP/IP 连接上接收数据。
  • TCPIPClient Output 节点 —— 获取到服务器应用程序的连接,并通过该连接发送数据。
  • TCPIPClient Receive 节点 —— 允许您从一个连接到消息流中部的服务器应用程序的 TCP/IP 连接上接收数据。
  • TCPIPServer Input 节点 —— 允许您启动一个消息流,从连接到一个客户端应用程序的 TCP/IP 连接上接收数据。
  • TCPIPServer Output 节点 —— 获取到客户端应用程序的连接,并通过该连接发送数据。
  • TCPIPServer Receive 节点 —— 允许您从一个连接到消息流中部的客户端应用程序的 TCP/IP 连接上接收数据。

TCP/IP 节点线程模型

TCP/IP 节点不会直接创建或管理 TCP/IP 连接 —— 这项工作是由连接管理器完成的,连接管理器是 Message Broker 执行组的一部分。Message Broker 产品的这个内部组件不会公开给开发人员,但是了解它的工作方式将非常有用,您可以通过它了解消息流的架构可扩展性。考虑进入到 Message Broker 的数据。它提供了两个不同的 TCP/IP Input 节点:TCPIPServer Input 节点和 TCPIPClient Input 节点:

TCPIPServer Input 节点线程模型

包含 TCPIPServer Input 节点的消息流将侦听端口,等待客户端应用程序的连接尝试。TCPIPServer 输入端点的属性中指定了一个端口号,任何试图连接到该端口上的 Broker 主机名的应用程序都将尝试启动一个新连接。默认情况下,代理最多可接受 100 个这样的连接,通过修改节点的相关可配置服务的 MaximumConnections 属性,可以修改这个值。发出的每个连接都将尝试开始一个消息流线程。默认只有一个线程可用,除非对 TCPIPServer Input 节点配置了额外的实例。

如果进一步建立连接,并且线程处于繁忙状态,那么代理的连接管理器将一直等待下去,直到线程完成工作并变为可用。一旦应用程序建立连接后,一条空的消息将被传播到节点上名为 Open 的输出终端。使用消息流的这个分支定义在连接已打开但尚未开始处理数据时执行的逻辑。数据然后通过连接传输,节点将把数据传输到名为 Out 的输出终端。将根据 Input Message Parsing 以及 Records and Elements 选项卡中的设置对数据进行解析。根据数据的物理格式,可以采用多种不同的方法。节点还使您能够指定在哪些情况下应当关闭现有连接,以及是否应当保留数据输入流以供后面的节点使用,比如 TCPIPServer Receive 节点,后面有关动态特性的例子将显示这一点。

TCPIPClient Input 节点线程模型

包含 TCPIPClient Input 节点的消息流将侦听端口,等待服务器应用程序的连接尝试。默认情况下,在部署包含 TCPIPClient Input 节点的消息流时不会创建连接,除非相关的可配置服务将 MinimumConnections 属性配置为大于 0。在这种配置下,节点将等待另外的输出或请求节点建立连接。除了可用的连接外,还需要向套接字提供数据,以便由 TCPIPClient Input 节点驱动的消息流开始处理过程。

如果节点的可配置服务的 MinimumConnections 属性被设置为大于 0 的值,那么在部署消息流时,代理将创建连接,直到连接数达到 MinimumConnections 所设置的值。这些连接是可用的,但是要对消息流进行解释,直到数据达到要进行处理的套接字。需要注意,对于这种架构设计,要成功地扩展包含输入节点的消息流,必须向节点添加额外的实例,然后配置其相关可配置服务的 MinimumConnections 和 MaximumConnections。

客户端和服务器示例

图 5. 客户端和服务器示例消息流
客户端和服务器示例消息流
客户端和服务器示例消息流

WebSphere Message Broker 帮助您为使用 TCP/IP 实现组件通信的系统创建更加灵活的架构,如下面的示例消息流所示。该示例使用了两个 Java™ 应用程序。第一个应用程序是附带的示例应用程序,名为 Sender.java,它使用户能够在命令行中输入字符数据并发送到套接字。该数据条目通过消息流开始传播。消息流包含一个 TCPIPServer Input 节点,后者接收 TCP/IP 流并传递到 Socket 1112。计算节点 UpperCase 将接收到的文本字符转换为大写形式并通过 TCPIPClient Output 节点发送到 Socket 1113。第二个附带的 Java 应用程序名为 Receiver.java,是一个简单的回传(echo)应用程序,它侦听 TCP/IP 流并将流发送回相同的套接字(在本例中为端口 1113)。Receiver.java 发送回数据后,TCPIPClient Receive 节点将接收数据并使用 Compute 节点(即 Reverse)将字符顺序颠倒过来,然后再通过 TCPIPServer Output 节点将数据返回给 Socket 1112 上的原始 Sender 应用程序。

图 6. sender 应用程序的命令行输出
sender 应用程序的命令行输出
sender 应用程序的命令行输出
图 7. receiver 应用程序的命令行输出
receiver 应用程序的命令行输出
receiver 应用程序的命令行输出

动态长度示例

在更复杂的场景中,我们可以定义从输入 TCP/IP 流获得的数据字节数,从而动态控制 TCP/IP Receive 节点。在本地环境中设置 Length 属性可以覆盖 TCPIPClient Receive 节点和 TCPIPServer Receive 节点使用的 TCP/IP 连接。如果节点的输入树具有一个本地环境,其中包含 $LocalEnvironment/TCPIP/Receive/Length 值,那么该值将控制将要读取的字节数。本地环境值将覆盖节点中指定的 Length (单位:字节)属性。如果 Record detection 属性被设置为 Fixed Length 以外的值,那么本地环境设置将被忽略。如果没有给出本地环境设置,或者该设置为 null,那么将忽略该值并使用节点中硬编码的值。本地环境可以由 TCPIPClient Receive 节点之前的任何相应节点设置(例如 Compute、JavaCompute 或 PHP 节点)。在使用 Compute 节点设置时,需要修改默认的 Compute Mode 属性,这样节点中包含的 ESQL 就可以控制本地环境树。下面的例子演示了这一概念:

图 8. 动态长度示例消息流
动态长度示例消息流
动态长度示例消息流

TCPIPClient Input 节点接收到数据后,该节点将从输入比特流读取前四个字节的数据(固定长度)并将其发送给 Out 终端。之所以读取 4 个字节,是因为已在 TCPIPClient Input 节点中进行了静态设置。下一个节点是名称为 Length Processing 的 Compute 节点,它将对消息数据的前四个字节进行解释。在本例中,这 4 个字节包含剩余的消息的长度。该长度值在本地环境中设置,如下面的清单 1 所示,它将动态控制以下 TCPIPClient Receive 节点。TCPIPClient Receive 节点从比特流中获取数据(动态配置的长度),并将其作为 BLOB 域消息传播到后面的节点。最后,MQOutput 节点将输出消息写入到名为 LENGTH.OUT 的队列中。输出消息比 TCP/IP 流中的原始数据短 4 个字节。

清单 1. Compute 节点 ESQL
CREATE COMPUTE MODULE FunctionalFlow_Length_Processing
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
        SET OutputLocalEnvironment = InputLocalEnvironment;
        SET OutputLocalEnvironment.TCPIP.Length.Receive = 
            CAST(InputRoot.BLOB.BLOB AS CHAR CCSID 1208);
        RETURN TRUE;
    END;
END MODULE;

图 9 显示了 Dynamic Length 特性的用法。在本例中,通过 TCP/IP 发送的文本流为 0007preetha,其 16 进制形式为 x3030303770726565746861。该图是从调试器获取的屏幕截图,其中本地环境包含 4 字节值 0007,这促使以下 TCPIPClient Receive 节点将 7 个字节的数据读入到树的 Message 部分中。在写出到输出队列之前,屏幕快照直接在工作流的末端显示此消息:

图 9. 环境树显示接收长度
环境树显示接收长度
环境树显示接收长度

真实的应用程序示例

通过 TCP/IP 和套接字实现的应用程序通信被广泛应用于许多行业,因此 Message Broker TCP/IP 节点具有许多实际的应用。本文将主要通过两种行业示例来演示这种技术在实际中的使用:

  • 航空业:MATIP 和 BATAP
  • 银行业:ISO8583

有关 Message Broker TCP/IP 节点为业务提供帮助的更多信息,请联系本文作者。

航空业:MATIP 和 BATAP

航空业采用互联网协议(MATIP)通信标准,采用 Mapping of Airline Traffic 通过 TCP/IP 网络在不同应用程序之间接收和传递消息,比如航班预订和票务系统。MATIP 的应用十分广泛,包括企业内部网和连接专用网络和合作伙伴外联网的 B2B 集成场景。使用 MATIP 标准的最常见的消息类型是 EDIFACT 消息和 International Air Transport Association / Société Internationale de Télécommunications Aéronautique (IATA / SITA) teletype 消息。(IATA 是一个国际贸易机构,通常代表航空业和大部分国际航空公司,而 SITA 是一家为航空业提供网络解决方案的公司)。

通常,Message Broker 的路由和转换功能被用于连接 TCP/IP 端点和 WebSphere MQ 队列之间的应用程序。这种应用进一步扩展了航空业应用程序的范围,不再局限于专用 SITA 网络或 StarNet 基础架构(链接 Star Alliance 合作伙伴航空公司的网络)。下面讨论的模式可以加速开发,缩短了集成开发人员构建 MATIP 解决方案所需的时间。提供了 MATIP 支持以在两种主要的航空网络流量之间通信:

  • 事务流量 —— 也称为 类型 A,提供实时的队列和响应集成。用于高优先级消息,如果消息在传输过程中丢失,那么必须重新发送该消息。
  • 消息流量 —— 也称为 类型 B,提供了更高的保护程度,但是即时性较差。尽管数据是同步发送的,协议需要重新发送在传输过程中丢失的消息。

从这里开始,MATIP 将被用于 MATIP Type B 流量。Message Broker 将负责满足 MATIP 栈的持久化、确认和重新发送需求。实际的数据消息本身(通常包含 teletype 或 EDIFACT,但是消息流并不关心具体的类型)通过消息流传输。换言之,协议栈的应用程序层负责解释,不需要考虑建立和维护通信会话的 handshake 消息。图 10 和其下的注解显示了协议栈的排序以及每层的作用:

图 10. 协议层和职责划分
协议层和职责划分
协议层和职责划分
  1. 接收到原始的 TCP/IP 数据流,其中包含的 MATIP 消息将被解析并用来建立会话。MATIP 消息包含一个 BATAP 信封。
  2. 栈的 Type B Application To Application Protocol(BATAP)层负责确保数据的转移 —— 比如向消息添加一个序列号,确认收到数据,以及在未及时收到确认的情况下重新发送数据。
  3. 堆栈的应用程序层用于解析和解释数据本身。该层不属于本文讨论的模式范围。

要理解 Message Broker 在 MATIP 场景中扮演的角色,考虑在与 MATIP 应用程序通信时发生的典型交互,如图 11 所示。竖轴代表时间,红色的水平线显示 MATIP 应用程序和 Message Broker 消息流之间的数据传输。在与 MATIP 应用程序交互时,Message Broker 可以充当 TCP/IP 客户端或 TCP/IP 服务器。下面将要讨论的样例消息流充当客户端,意味着它将负责发送 “Session Open” 消息以发起会话。一旦消息流接收到 “Open Confirm” 消息后,将开始进行数据交换。

图 11. MATIP 应用程序和 Message Broker 的交互
MATIP 应用程序和 Message Broker 的交互
MATIP 应用程序和 Message Broker 的交互

消息流可以通过 TCP/IP 从 MATIP 应用程序接收数据消息,并通过 WebSphere MQ 队列提供保护。同样地,它可以接收来自 WebSphere MQ 队列的消息并通过 TCP/IP 传递。下图所示的消息流的两个竖直分支显示了这两种不同方向的数据流:

图 12. MATIP 客户端消息流
MATIP 客户端消息流
MATIP 客户端消息流

在与 MATIP 应用程序通信时,BATAP 信封的作用就是为每个传输的消息分配一个三位序列号,称为 SRLN(SeRiaL Number)。当成功、安全地接收到消息后,接收方应用程序发送一个 BATAP 确认消息,通常称为 IMA。该消息包含 BATAP 序列号。应用程序还可以使用一个 IMA 消息来确认多个入站数据消息安全达到(如图 11 中消息 002、003 和 004 的 IMA 所示)。

在交换消息和 IMA 确认时,MATIP 应用程序的发送端将维护一个窗口。窗口大小决定了已发送且当前处于未完成状态(等待接收确认消息)的消息的数量。每当接收到 IMA 时,窗口空间将变为可用,允许发送另一个数据消息。在发送每条消息时都会启动一个计时器。如果超过了预定义的时间,数据将被重新传输。这类消息被称为 Possible Duplicate Message (PDM)。MATIP 和 BATAP 协议没有指定重新发送的最大值(该值用于防止无限制地重复发送同一条消息),但是 MATIP 应用程序可以实现它们自己的策略。消息流满足所有这些行为,因此,如果希望将基于 WebSphere MQ 的应用程序与 MATIP 网络集成,那么可以快速实现这一目的,不需要考虑协议的细节。

银行业:ISO8583

国际标准组织(ISO)是由若干工作组组成的国际化组织,这些工作组负责制定、定义和发布许多行业中的公共和私有组织使用的数据标准。针对银行和金融服务领域的通用 ISO 标准为 ISO8583,它指定了一个通用接口,设备和发卡方可以通过该接口交换来自信用卡和借记卡的消息。ISO8583 的典型用途是为通过零售点设备或自动柜员机(ATM)交换的数据定义消息格式。消息通常包含有关交易金额、交易的发起位置(商店或 ATM)、卡帐号和银行代码的信息。接收数据的后端应用程序可以有多种用途,比如核心银行系统、获取银行账单、在多个账户之间转账、账单支付,或手机充值。Message Broker 可以帮助实现这些中间件场景,它可以在 ISO8583 标准和更常见的数据格式(如基于 XML 的 Web 服务)之间转换数据,以及利用其他协议,如 WebSphere MQ、FTP 或 HTTP。它的作用可以总结如下:

图 13. Message Broker 在 ISO8583 消息场景中的作用
Message Broker 在 ISO8583 消息场景中的作用
Message Broker 在 ISO8583 消息场景中的作用

ISO8583 消息的前面通常带有自定义头部,但是核心 ISO8583 消息,如果图 14 所示,通常包含三个部分:

  • 消息类型指示符 (MTI) —— 4 个数字,指定 ISO8583 标准的版本、消息类型、消息功能和消息的发起位置。
  • 一个或多个位图 —— 消息通常包含一个 1 字节的主位图,其中的各个位表示哪些字段将显示在这个特定消息实例中。主位图指定是否呈现字段 1 到 64。如果还包含一个副位图,则指定是否存在字段 64 到 128。第三个位图包含之后的 64 个字段的信息,以此类推。主位图和副位图较为常见,但是很少有包含第三个位图的消息。
  • 消息字段 —— 这些元素由 ISO8583 标准定义,包含一些交易信息,如数量、日期、时间和国家代码。
图 14. 典型 ISO8583 消息的布局
典型 ISO8583 消息的布局
典型 ISO8583 消息的布局

Message Broker TCP/IP 节点可用于接收来自销售点设备的数据。要确定从进入套接字的比特流接收到的消息的长度,必须对消息开头部分的位图进行解释,从而推断出消息中将提供的字段。根据这些信息和每个字段的长度(ISO8583 标准定义了每个字段的数据类型和固定长度),您就可以计算消息的总长度。每个消息的总长度是不同的。

考虑下面的例子。图 15 显示了示例授权请求消息的主位图的图形表示。图中显示的 8 个字节构成了消息的主位图部分。标记表示可用的消息字段编号。该示例消息包含的字段编号为 4、7、11、12、24、37、38、39、48 和 49。Byte01 表示字段 4 和字段 7 存在,这意味着 Byte01 表示一个二进制的值 00010010,其十六进制值为 x12。

图 15. 主位图的详细示例
主位图的详细示例
主位图的详细示例

对其他字节应用相同的逻辑将生成一个主位图,该位图包含十六进制值 x123001000E018000。图 15 显示的样例消息流展示了如何结合使用 TCP/IP 节点和流逻辑来接收和解释一条 ISO8583 消息。在本示例中,数据采用与图 14 相同的结构。消息的定制头部包含两个固定长度的字段 —— 一个 ATM Identifier 和一个 Encoded Length。该头部之后是 MTI(长度为 4 个字节),然后是主位图(8 个字节长),最后是包含数据字段的最主要的消息部分。

图 16 显示了提供 Message Broker 解决方案的样例消息流。TCPIPServer Input 节点从输入流接收到固定长度为 30 个字节的消息(包括所有字段和主位图),然后名为 LengthProcessing 的 Java Compute 节点将 Encoded Length 的值放到本地环境中。该长度随后用于动态驱动 TCPIPServer Receive 节点从输入流获得消息的其余部分的数据。第二个 Java Compute 节点名为 ParseMessageDataFields,它将数据划分为多个字段。在消息流中的这个位置使用 Java Compute 节点的原因是因为该节点能够解释数据字节的每个位。Message Broker 的 message set 特性(提供消息模型化)无法为数据的任何单个项指定小于一个字节的长度。如果要求在消息模型中实现逐位表示,可以在 WebSphere TX 节点中使用映射 —— 本文稍后将详细介绍该内容。

图 16. ISO8583 样例消息流
ISO8583 样例消息流
ISO8583 样例消息流

为了理解本文附带的消息流和代码,表 1 对进入的消息的数据字段及其值进行了总结:

表 1. ISO8583 消息样例的输入数据
字段名长度数据(ASCII 格式)Data (Hexadecimal format)
ATM Identifier15Ben_ATM_ID00001x42656E5F41544D5F49443030303031
Encoded Length3123x313233
MTI4110031313030
Primary Bitmap8Not Applicable (not intended to be readable)x123001000e018000
Field4 -- Amount of Transaction12000000000500x303030303030303030353030
Field7 -- Transmission Date Time1420110124092315x3230313130313234303932333135
Field11 -- System Trace Number6999999x393939393939
Field12 -- Local Transaction Date Time1420110124092315x3230313130313234303932333135
Field24 -- Network International ID3111x313131
Field37 -- Retrieval Reference12222222 x323232323232202020202020
Field38 -- Approval Code6BEN590x425350353930
Field39 -- Response Code277x3737
Field48 -- Additional Data PrivateVariable048;T123456;Y0000001;Y0001;Y123456781996;3034383b54313233 etc.
Field49 -- Transaction Currency Code3978x393738

为驱动该样例消息流,本文提供了一个简单的 Java 应用程序,该应用程序可以生成前面讨论的固定的输入消息。图 17 显示了该应用程序的命令行输出:

图 17. 生成 ISO8583 消息的 Java 样例测试程序
生成 ISO8583 消息的 Java 样例测试程序
生成 ISO8583 消息的 Java 样例测试程序

下面的屏幕截图显示了数据被解析到环境树的过程。解析后的数据布局被放到消息流的末端,其后紧接着被写入到名为 OUT.QUEUE 的输出队列的消息。

图 18. 显示解析后的 ISO8583 消息字段的环境树
显示解析后的 ISO8583 消息字段的环境树
显示解析后的 ISO8583 消息字段的环境树

下一个例子显示了另一种解析 ISO8583 数据的方法,该方法使用 WebSphere TX 映射实现解析。该模式采用图 19 所示的消息流,通过 TCP/IP 接收数据,使用 WebSphere TX 节点进行解析,然后将数据写入到 WebSphere MQ 队列。TCPIPServer Input 节点从输入流接收到 30 个字节的数据。数据中包含一些头部值,包括 ISO8583 消息的长度。第一个 JavaCompute 节点名为 LengthProcessing,确定消息的长度并将该值置于本地环境树中。通过这种方式可以动态控制后面的 TCPIPServer Receive 节点,这些节点用于接收头部以后的指定数量的字节。这些字节被发送到 BLOB 域中的下一个节点,而后面的 Compute 节点获取 PrimaryBitmap 内容(用 TCPIPServer Input 节点检索)并将其与消息的主内容(通过 TCPIPServer Receive 节点检索)连接在一起。更后面的 WebSphere TX 节点使用一个映射将 ISO8583 消息转换为相应的 XML 格式。

图 19. 使用 WebSphere TX 映射的 ISO8583 样例消息流
使用 WebSphere TX 映射的 ISO8583 样例消息流
使用 WebSphere TX 映射的 ISO8583 样例消息流

WebSphere TX 解析器对主位图进行检查,判断消息中出现的字段。类型树也包含用于定义 ISO8583 模型(定义每个字段的长度)的信息。图 20 展示了 WebSphere TX 类型树的规则,使 WebSphere TX 能够使用主位图中的信息来判断是否呈现每个字段:

图 20. ISO8583 WebSphere TX 映射构成规则
ISO8583 WebSphere TX 映射构成规则
ISO8583 WebSphere TX 映射构成规则

如果希望进一步了解本文附带的示例,在 Message Broker Patterns Repository 获取示例的完整样式。


下载资源


相关主题

  • WebSphere Message Broker 资源
  • WebSphere 资源
    • developerWorks WebSphere 开发人员资源
      面向使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供产品下载、how-to 信息、支持资源以及一个免费技术库,该技术库包含 2000 多篇技术文章、教程、最佳实践、IBM 红皮书和在线手册。
    • developerWorks WebSphere 应用程序连通性开发人员资源
      帮助您构建 WebSphere 应用程序连通性和业务集成解决方案的 how-to 文章、下载、教程、培训、产品信息等资源。
    • 最流行的 WebSphere 试用版下载
      免费下载关键 WebSphere 产品试用版。
    • WebSphere 论坛
      特定于产品的论坛,可以在此获得技术问题的答案,并与其他 WebSphere 用户分享您的专业经验。
    • IBM developerWroks 演示中心
      下载、观看这些自动运行的演示,了解 WebSphere 产品和 WebSphere 相关技术如果帮助您的企业响应快速变化、日益复杂的业务环境。
    • developerWorks 时事通讯
      developerWorks 新闻简讯提供了您感兴趣的主题的最新文章和信息。除 WebSphere 以外,还可以选择 Java、Linux、Open source、Rational、SOA、Web 服务和其他主题。立即订阅并设计您的定制邮件。
    • IBM Press 的 WebSphere 相关图书
      通过 Barnes & Noble 便捷地在线订购。
    • WebSphere-相关活动
      世界各地针对 WebSphere 开发人员的会议、商贸展览、网络广播和其他活动。
  • developerWorks 资源
    • IBM 软件产品的试用下载
      免费试用下载 IBM® DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 产品。
    • developerWorks 博客
      加入 developerWorks 用户和作者、IBM 编辑和开发人员的谈话。
    • developerWorks 技术简报
      由 IBM 专家主持的免费技术会议,帮助您加快学习曲线并在最困难的软件项目中获得成功。会议范围包括 1 小时的虚拟简报和全球范围内举办的半天和全天的现场会议。
    • developerWorks 播客
      收听新颖有趣的软件创新者访谈和讨论。
    • IBM Education Assistant
      多媒体教育模块集合,帮助您更好地理解 IBM 软件产品且更高效地满足您的业务需求。
static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=750923
ArticleTitle=使用 WebSphere Message Broker 集成 TCP/IP
publish-date=08042011