您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Message-Broker-V6.1-中的文件处理
developerWorks中国WebSphere文档库WebSphereMessageBrokerV6.1中的文件处理引言本文介绍如何使用IBM®WebSphere®MessageBrokerV6.1(以下称为MessageBroker)中新的文件处理功能。本文旨在帮助MessageBroker开发人员和架构师使用FileInput和FileOutput节点实现常见的文件处理场景。您应该拥有MessageBroker的一些经验,不过本文对初学者和有经验的用户应该都有用。将文件处理功能作为核心产品的一部分,WebSphereMessageBrokerV6.1是第一个版本。在使用MessageBroker为新的或现有的消息流实现文件接口时,FileInput和FileOutput节点应该是您的第一选择。过去,消息流可能使用了MessageBrokerFileExtender、WebSphereTransformationExtender、SupportPacIA0X或其他插件节点解决方案来提供文件处理。MessageBrokerFileExtender基于Primeur推出的SPAZIO系列产品中的技术,并在AIX®、Linux®、SunSolaris®和Windows®上运行。FileExtender节点在z/OS®上不可用。WebSphereTransformationExtenderforMessageBroker基于以前的Mercator/Ascential多输入、多输出转换引擎。过去,MessageBroker客户使用TransformationExtender来处理超大文件。MessageBrokerV6.1是为异构IT环境中通用数据连接、路由和转换而构建的高级企业服务总线。当与基于文件的应用程序集成时,MessageBrokerV6.1对分布式和z/OS平台上的文件输入和文件输出的支持使其成为理想的选择。新的本机文件支持提供了:大文件处理批处理流解析新节点的设计使得从其他解决方案迁移成为非常简单的任务:FileInput节点可以使用现有的消息集模型解析各个记录,以及用于记录检测(确定一个记录从何处结束以及下一个记录从何处开始)。LocalEnvironment树用于存储和传播输入文件元数据。FileInput节点提供了与其他MessageBrokerV6.1节点相同的Validation、Transactions和Instances选项卡。FileInput节点记录检测FileInput节点为您提供了一组用于解析输入文件内容的方法。在决定要使用哪一个选项时,最重要的考虑事项是在传播每个记录时,文件中的多少数据应该通过消息流发送。FileInput节点的RecordsandElements选项卡指定应该如何解释输入文件的构成记录。在此选项卡和InputMessageParsing选项卡上设置属性,以控制从输入文件获得并通过流传播的消息数量:图1.FileInput节点属性指定记录检测方法下图总结了可调用的不同模型。红色条指示传播到流的其他部分的文件部分。绿色框表示由分隔符提供的标记:图2.Wholefile——使用一次传播来传播整个文件图3.Fixedlength——FileInput节点通过计算传播的长度来拆分每次传播。不需要分隔符将每次传播与下一次传播分离。图4.Delimited——FileInput节点通过确定分隔符来拆分每次传播。输入文件的每次传播之间包含一个分隔符。分隔符本身不通过消息流进行传播。图5.Parsedrecordsequence——只要解析器能够确定一次传播在何处结束和下一次传播在何处开始,则不需要任何分隔符将每次传播与下一次传播分离。如果与XMLNSC或MRMTDS选项结合使用,则每个记录可以具有不同的长度。FileOutput节点记录定义FileOutput节点为您提供了一组方法,以指定应该如何在各个记录的基础上构造输出文件内容。RecordsandElements选项卡使用RecordDefinition来指定输出文件的构造:图6.FileOutput节点属性指定记录定义方法下面的关系图总结了可调用的不同模型。红色条指示从流的主要部分传播到FileOutput节点的文件部分。绿色框表示由FileOutput节点的属性指定的分隔符提供的标记。绿色框表示由FileOutput节点的属性指定的填充字节提供的标记。图7.记录为WholeFile。使用一次传播来传播整个文件内容。图8.记录为UnmodifiedData。每次传播之间不写入分隔符。图9.记录为FixedLengthData。FileOutput节点使用填充字节将每次传播的长度填充至所需的长度,从而拆分每次传播。输出文件中不使用任何分隔符。图10.记录为DelimitedData。FileOutput节点在每次传播之间添加分隔符,从而拆分每次传播。使用FileInput节点检测带分隔符的记录在FileInput节点的RecordsandElements选项卡上,选择Delimited将告诉该节点,应该使用分隔符将输入文件中的数据分离为单独的记录以便传播。分隔符决不会包括在传播的消息中。配置分隔符可以将分隔符设置为DOS或UNIX行结束符,或自定义分隔符(十六进制):图11.FileInput节点属性指定分隔符当将分隔符设置为DOS或Unix行结束符时,节点将行结束符识别为分隔符。在Windows上,行结束符是回车符后面跟着一个换行字符(CRLF或X'0D0A')。在Unix上,行结束符是单个换行字符(LF或X'0A')。无论运行代理的平台是什么,节点都将这两个序列视为分隔符。如果两个序列同时出现在同一个文件中,则节点将两者都视为分隔符。节点不会识别z/OS上的EBCDIC文件中发现的行结束符,即换行字节(X'15')。要将此行结束符识别为分隔符,可以设置节点使用值为15的自定义分隔符。当将分隔符设置为自定义分隔符(十六进制)时,节点使用自定义分隔符属性中指定的字节或字节序列作为分隔符。有效的自定义分隔符必须具有偶数个十六进制数字。例如,您可以输入0D0A,其中包括四个十六进制数字(两个字节),并表示X'0D0A'。最大序列长度为32个十六进制数字(16个字节)。如果没有指定自定义分隔符,则使用缺省的X'0A',此字符表示单个换行字符。配置分隔符类型FileInput节点将输入文件中出现的每个分隔符视为分离(中缀)或终止(后缀)每个记录。如果文件以分隔符开始,则节点将该分隔符之前的(零长度)文件内容视为一个记录,并向流传播一个空记录。缺省的分隔符类型为Postfix(后缀)。这意味着每个分隔符终止一个记录。如果文件以分隔符结尾,则不会传播分隔符之后的空记录。如果文件没有以分隔符结尾,则对文件的处理方式就像文件的最后一个字节后面跟着一个分隔符一样。或者,可以指定Infix(中缀)类型的分隔符。这意味着每个分隔符分离记录。如果文件以分隔符结尾,则仍然传播最后一个分隔符后面的(零长度)文件内容,尽管其中没有包含数据。读取其中的记录由DOS或Unix行结束符分隔的文件的示例假设此示例中的输入文件具有以下内容。每行以行结束符(在Windows上为X'0D0A',在Unix上为X'0A')结尾。AccNo12345/AccNoAccNo34567/AccNoAccNo56789/AccNo在FileInput节点的RecordsandElements选项卡上选择以下属性:图12.FileInput节点属性FileInput节点检测以DOS或UNIX行结束符结尾的记录,并为发现的每个记录传播一条消息。DOS或UNIX行结束符不是任何消息的一部分。结果是传播了三条消息,如下所示:消息1:AccNo12345/AccNo消息2:AccNo34567/AccNo消息3:AccNo56789/AccNo读取其中的记录由自定义分隔符分隔的文件的示例假设此示例中的输入文件具有以下内容。文件结尾没有行终止符。AccNo12345/AccNo,AccNo34567/AccNo,AccNo56789/AccNo在FileInput节点的RecordsandElements选项卡上选择以下属性:图13.FileInput节点属性十六进制X'2C'表示ASCII中的逗号字符。在其他系统上可能需要使用不同的十六进制代码(此序列不经历代码页转换)。FileInput节点检测逗号字符并使用该字符分离记录。由于Delimitertype属性的值为Infix,因此文件结尾不需要逗号。逗号字符不属于传播的任何消息的一部分。结果是传播了三条消息,如下所示:消息1:AccNo12345/AccNo消息2:AccNo34567/AccNo消息3:AccNo56789/AccNo在此示例中,消息正文中没有任何逗号。如果消息正文中出现了逗号,则会导致在该点拆分记录,从而导致将不正确地形成的消息传播到流的其余部分。使用FileOutput节点定义带分隔符的记录在FileOutput节点的RecordsandElements选项卡上,选择RecordisDelimitedData将告诉该节点,应该使用分隔符分离从输入消息得到的数据。仅当在FinishFile终端上接收到消息时,文件才结束。配置分隔符可以将分隔符设置为Broker系统行结束符或自定义分隔符(十六进制)。图14.FileOutput节点属性当将分隔符设置为Broker系统行结束符时,节点将使用运行代理的平台上的相应行结束符字节序列作为分隔符。在Windows上,行结束符是回车符后面跟着一个换行字符(CRLF或X'0D0A')。在Unix上,行结束符是单个换行字符(LF或X'0A')。在z/OS上,行结束符是“换行”字符(X'15')。当将分隔符设置为CustomDelimiter(Hexadecimal)时,节点将使用Customdelimiter属性中指定的显式分隔符序列作为要使用的分隔符。有效的自定义分隔符必须具有偶数个十六进制数字,并且允许的最大序列长度为16字节(32个十六进制数字)。缺省分隔符为X'0A',此字符表示单个换行字符。配置分隔符类型缺省的分隔符类型为Postfix。这意味着在所写入的每个记录后面添加分隔符。或者,可以指定Infix类型的分隔符。这意味着仅将分隔符插入任何两个相邻记录之间。写入其中的记录由DOS或Unix行结束符分隔的文件的示例假设将以下三条消息发送到FileOutput节点的In终端,随后将最后一条消息发送到同一个节点的FinishFile终端。最后一条消息包含什么内容并不重要。消息1:AccNo12345/AccNo消息2:AccNo34567/AccNo消息3:AccNo56789/AccNo最后一条消息:Anything/Anything在FileOutput节点的RecordsandElements选项卡上选择以下属性:图15.FileOutput节点属性FileOutput节点写入一个文件。该文件包含三个记录,每个记录由运行代理的平台上的相应行终止符终止。文件包含以下内容:AccNo12345/AccNoAccNo34567/AccNoAccNo56789/AccNo写入其中的记录由自定义分隔符分隔的文件的示例假设将以下三条消息发送到FileOutput节点的In终端,随后将最后一条消息发送到同一个节点的FinishFile终端。最后一条消息包含什么内容并不重要。消息1:AccNo12345/AccNo消息2:AccNo34567/AccNo消息3:AccNo56789/AccNo最后一条消息:Anything/Anything在FileOutp
本文标题:Message-Broker-V6.1-中的文件处理
链接地址:https://www.777doc.com/doc-6242924 .html