WebSphere MQ File Transfer Edition 中的资源监控功能

WebSphere MQ File Transfer Edition(以下简称 WebSphere MQ FTE)在多个 IT 系统之间提供无需编程的可靠的、可审计的和可管理的文件传输,并且对文件大小没有限制。本文将向您描述几个场景,以展示如何使用 WebSphere MQ FTE 资源监控功能。

Laurence Bonney, WebSphere MQ JMS 测试团队负责人, WSO2 Inc

Laurence Bonney 是英国 IBM Hursley Software Lab 的 WebSphere MQ 开发团队的一名软件工程师。


developerWorks 投稿作者

2010 年 1 月 25 日

资源监控概述

资源监控功能是 IBM® WebSphere® MQ FTE V7.1 新添加的功能,该功能提供一种更灵活的任务启动方法。这个新的 Ant 功能支持启动一个文件传输任务和其他多种任务。本文主要关注文件传输功能,下面的场景将描述文件移动过程,这种文件移动是资源监控器的触发器条件得到满足后的结果。

资源监控最常见的形式是监控一个资源并在触发器条件满足时启动预定义的任务。在 WebSphere MQ FTE V7.0.1 中,受监控的资源的范围是一个目录或多个子目录。触发条件是受监控的目录中发生文件到达、更新或移除事件。

本文描述两个场景,这两个场景中的所有示例都基于 WebSphere MQ FTE 提供的命令行命令,而不是 MQ Explorer WMQFTE Plug-in。但是,本文介绍的概念也适用于 MQ Explorer WMQFTE Plug-in。执行以下任务之前,需要正确配置 MQ 网络并定义和启动特定代理。无论代理是否驻留在相同的机器或使用相同的队列管理器,只要它们能够在 MQ 网络上互相联系就行。这些场景在单个 Windows 机器上创建,但相同的概念也适用于 WebSphere MQ FTE 支持的任何平台。这两个场景是:

简单资源监控

这个场景涉及一个源代理和一个目标代理,代理队列管理器的名称和代理名称相同。您将创建一个在源代理上定义的资源监控器(因为在 WebSphere MQ FTE V7.0.1 中,资源监控器必须在源代理上定义,原因是要监控的目录对源代理必须是可访问的)。资源监控器将检查受监控目录 C:\monitored 中的文件 trigger.go 是否存在或被更新。如果触发条件被满足,定义的任务是通过目标代理将文件 C:\source\sourcefile.txt 从源代理传输到 C:\destination\destinationfile.txt。

创建任务文件

首先,创建一个名为 task.xml 的文件,该文件定义当监控器的触发条件得到满足时将启动的传输任务。在 fteCreateTransfer 命令中使用 -gt 选项,这不是为了启动一个传输任务,而是为了编写一个 XML 文件,该 XML 文件将定义某个文件的传输,该文件被指定为 -gt 选项的一个参数。这个 XML 文件可以被手动放置到源代理的命令队列上,也可以用于 fteCreateMonitor 命令(本例采用这种方法)。

清单 1. 创建一个简单的资源监控器任务文件
C:\WMQFTE\bin> fteCreateTransfer -sa SOURCEAGENT –sm SOURCEAGENT -da DESTINATIONAGENT
–dm DESTINATIONAGENT -de overwrite -t text -df
C:\destination\destinationfile.txt -gt C:\monitored\task.xml 
C:\source\sourcefile.txt 5655-U80, 5724-R10 Copyright IBM Corp.  2008, 2009.  
ALL RIGHTS RESERVED BFGCL0204I: Transfer request has been output to 
C:\monitored\task.xml

这个任务 XML 文件可以在使用之前进行编辑,下一个场景将介绍这方面的内容。但是,对于这个简单的传输任务,生成的任务文件已经足够满足需求。

创建资源监控器

定义任务后,现在可以创建资源监控器了。在这个示例中,在源代理 SOURCEAGENT 上定义新监控器 SimpleResourceMonitor,用于监控目录 C:\monitored 中的文件 trigger1.go 是否存在或被更新。

清单 2. 创建一个简单的资源监控器
C:\WMQFTE\bin> fteCreateMonitor -ma SOURCEAGENT -mn SimpleResourceMonitor -md 
C:\monitored -mt C:\monitored\task.xml -tr match,trigger.go -jn SimpleMonitorJob 
5655-U80, 5724-R10 Copyright IBM Corp.
2008, 2009.  ALL RIGHTS RESERVED BFGCL0188I: The request to create a monitor has
been submitted with a request id of 414d5120434f4d4d414e442020202020f3b48b4a20001f03.
BFGCL0251I: The request has successfully completed.

执行带有详细输出的 fteListMonitors 命令将显示已定义的监控器:

清单 3. 显示一个简单的资源监控器
C:\WMQFTE\bin>fteListMonitors -v
5655-U80, 5724-R10 Copyright IBM Corp.  2008, 2009.  ALL RIGHTS RESERVED 
Monitor Information:
    Name:             SIMPLERESOURCEMONITOR
    Agent:            SOURCEAGENT
    Status:           Started
    Root directory:   C:\monitored
    Condition:        Match
    Pattern:          trigger.go

测试资源监控器

现在您有两个代理和一个资源监控器,它们将主动检查目录 C:\monitored 中是否存在文件 trigger.go。此时,确保 C:\source\sourcefile.txt 存在于源代理的文件系统中,C:\destination\ 存在于目标代理的文件系统中。现在,在 C:\monitored 中创建文件 trigger.go 将导致监控器在 1 分钟的默认检查间隔内启动预定义的传输任务。可以通过两种方法检查传输结果:一是检查文件 C:\destination\destinationfile.txt,该文件现在应该存在于目标代理的文件系统中;二是检查 WebSphere MQ Explorer GUI WMQFTE Plug-in,该插件应该显示文件在两个代理之间成功传输。如果文件 trigger.go 被更新,进而导致修改日期更改,则监控器将在 1 分钟检查间隔内再次触发并再次传输文件 C:\destination\destinationfile.txt。由于原始任务拥有 -de 覆盖选项,即使目标文件自上次传输后已经存在,新传输任务仍将成功执行。

使用变量替代的资源监控

这个场景涉及 4 个代理:一个资源代理和 3 个目标代理。这 3 个目标代理分别命名为 AccountsAgent、FinanceAgent 和 HRAgent。与第一个场景一样,代理队列管理器的名称与代理名称一样,您创建了一个在源代理上定义的资源监控器。这个资源监控器检查受监控目录 C:\monitored 或其任意子目录中是否存在扩展名为 .txt 的文件或这些文件是否被更新,子目录最大递归检查级别为一级。当触发条件满足时,预定义任务将执行,将触发器文件从源代理传输到由触发器文件所在的子目录名定义的目标代理。另外,预定义任务将基于源文件名重命名目标文件,将扩展名 .txt 更改为 .<AGENTNAME>,其中 <AGENTNAME> 是文件传输到的目标代理的名称。这个场景展示如何使用资源监控器提供的变量替代功能将一个静态任务文件转换为多个动态文件传输任务。

创建任务文件

与基本场景相似,首先需要一个任务文件。由于任务文件需要进行手动编辑,因此您可以使用上一个场景生成的任务文件(参见 清单 1. 创建一个简单的资源监控器任务文件)。这个初始任务文件如下所示:

清单 4. 基本任务文件
<?xml version="1.0" encoding="UTF-8"?> 
<request version="2.00"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
  <managedTransfer>
    <originator>
        <hostName>localhost</hostName> 
        <userID>Laurence</userID>
    </originator> 
    <sourceAgent qmgr=”SOURCEAGENT” agent="SOURCEAGENT"/>
    <destinationAgent qmgr=”DESTINATIONAGENT” agent="DESTINATIONAGENT"/>
    <transferSet>
      <item mode="text" checksumMethod="MD5">
        <source recursive="false" disposition="leave">
          <file>C:\source\sourcefile.txt</file>
        </source> 
        <destination type="file" exist="overwrite">
          <file>C:\destination\destinationfile.txt</file>
        </destination>
      </item>
    </transferSet>
  </managedTransfer>
</request>

根据场景描述,以下内容在这个场景中被视为是动态的。

将被变量替代的部分
描述旧的静态值新的动态值
源文件名C:\source\sourcefile.txt${FilePath}
目标代理DESTINATIONAGENT${FilePath{token=-2}{separator=/}}
目标 QmgrDESTINATIONAGENT${FilePath{token=-2}{separator=/}}
目标文件名C:\destination\destinationfile.txtC:/destination/${FileName{token=1}{separator=.}}.${FilePath{token=-2}{separator=/}}

${FilePath} 将在任务执行时被它当前拥有的完整路径值(包括触发器文件名)所替代并被资源监控器读取。只需使用这个变量,您就可以执行一些操作以实现一些有趣的传输任务。要了解其他几个可以以类似方法使用的变量的相关信息,请参见 WebSphere MQ FTE V7.0.1 信息中心。对于对目录分隔符的所有引用,我们使用 Unix 样式的目录分隔符 “/”。由于这种分隔符适用于 Windows 和 Unix,它使任务文件看起来似乎是平台通用的。

资源监控器使用与 ${FilePath} 相似的值读取 ${FilePath{token=-2}{separator=/}}。但是,在这个示例中,您使用分隔符 / 分隔这个值,然后从右至左提取第二个标记值并用该值替代。在这个场景中,这将是 C:\monitored\ 目录下的子目录名。例如,在这个变量替代中,触发器文件 C:\monitored\FinanceAgent\reports.txt 将变为 FinanceAgent。关于可用的操作方法的更多信息,请参见 WebSphere MQ FTE V7.0.1 信息中心

C:\destination\${FileName{token=1}{separator=.}}.${FilePath{token=-2}{separator=/}} 在任务执行时被资源监控器读取并替代。在这个示例中,您使用 ${FilePath} 和 ${FileName} 替代变量。${FileName} 计算忽略路径的触发器文件名,${FileName{token=1}{separator=.}} 计算由 “.” 分隔的第一个标记值,有效地保留文件名并移除扩展名。由于标记被指定为正值而不是负值,提取的值将使用从左到右的顺序。而 ${FilePath{token=-2}{separator=/}} 计算出与前面的目标代理相同的值。因此,在这个变量替代中,触发器文件 C:\monitored\FinanceAgent\reports.txt 将变为 C:\destination\reports.FinanceAgent。

通过使用 3 个新的动态值替换旧的静态值,这 3 个值在监控器每次发现一个匹配值并触发一个传输任务时都会不同,这种动态变化完全基于匹配的触发文件的名称和它在子目录中的位置。这个任务文件现在应该类似如下所示:

清单 5. 使用变量替代后的任务文件
<?xml version="1.0" encoding="UTF-8"?> 
<request version="2.00"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
  <managedTransfer>
    <originator>
        <hostName>localhost</hostName> 
        <userID>Laurence</userID>
    </originator> <sourceAgent QMgr="SOURCEAGENT" agent="SOURCEAGENT"/>
    <destinationAgent QMgr="${FilePath{token=-2}{separator=/}}"
        agent="${FilePath{token=-2}{separator=/}}"/>
    <transferSet>
      <item mode="text" checksumMethod="MD5">
        <source recursive="false" disposition="leave">
          <file>${FilePath}</file>
        </source>
          <destination type="file" exist="overwrite">
          <file>C:/destination/${FileName{token=1}{separator=.}}.
               ${FilePath{token=-2}{separator=/}}</file>
        </destination>
      </item>
    </transferSet>
  </managedTransfer>
</request>

创建资源监控器

现在任务文件已经修改为包含本场景需要的变量替代标记,下一步是定义资源监控器。在这个示例中,您可以在源代理 SOURCEAGENT 上定义新的监控器 VarSubResourceMonitor,检查目录 C:\monitored 中是否存在扩展名为 .txt 的文件或那些文件是否被更新。

清单 6. 创建变量替代资源监控器
C:\WMQFTE\bin> fteCreateMonitor -ma SourceAgent 
-mn VarSubResourceMonitor -md C:\monitored -mt C:\monitored\task.xml 
-tr match,*.txt -rl 1 -jn VariableSubstitutionMonitorJob 
5655-U80, 5724-R10 Copyright IBM Corp. 2008, 2009.  ALL RIGHTS RESERVED 
BFGCL0188I: The request to create a monitor has been submitted with a request id of 
414d5120434f4d4d414e442020202020f3b48b4a20002203.
BFGCL0251I: The request has successfully completed.

执行带有详细输出的 fteListMonitors 命令将显示已定义的监控器:

清单 7. 显示变量替代资源监控器
C:\WMQFTE\bin>fteListMonitors -v 
5655-U80, 5724-R10 Copyright IBM Corp.  2008, 2009.  ALL RIGHTS RESERVED Monitor
Information: 
Name:             VARSUBRESOURCEMONITOR 
Agent:            SOURCEAGENT 
Status:           Started
Root directory:   C:\monitored 
Condition:        Match
Pattern:          *.txt

测试资源监控器

您现在有 4 个代理和一个资源监控器,它们动态监控目录 C:\monitored 及其下一级子目录,检查是否存在扩展名为 .txt 的文件或那些文件是否被更新。确保目录 C:\destination\ 存在于目标代理的文件系统中。如果您现在在源文件系统中创建一个名为 C:\monitored\FinanceAgent\results.txt 的文件,监控器将在 1 分钟的默认检查间隔内启动预定义传输任务。您将看到 FinanceAgent 的文件系统的 C:\destination 目录中将出现一个名为 results.FinanceAgent 的文件。与上一个场景一样,您也可以使用 MQ Explorer WMQFTE Plug-in 检查传输结果,该插件将显示文件在两个代理之间成功传输。对 C:\monitored\HRAgent\results.txt 和 C:\monitored\AccountsAgent\results.txt 重复上述过程将会为这两个代理生成类似的结果。

故障诊断

尽管这些故障诊断方法并不是特定于资源监控的,但当传输任务没有按预期发生,或监控器在定义时没有显示为已注册,可以按照以下方法找出产生问题的原因:

  • 检查代理的 Output0.log 文件,获取关于您预期要发生的动作的相关信息。
  • 订阅 SYSTEM.FTE 主题以提取按代理分类的审计和日志消息输出:在 MQ Explorer 中,在协调 Queue Manager 上右键单击 SYSTEM.FTE 主题并选择 Test Subscription。指定主题字符串 SYSTEM.FTE/# 以获取发送到 SYSTEM.FTE 主题的所有消息。
  • 检查代理队列和传输队列以查看正在出现的消息,这些消息可能会指出一个 MQ 网络问题。

要了解关于故障诊断的更多信息,请参阅 WebSphere MQ FTE V7.0.1 信息中心

结束语

本文介绍了几个受益于资源监控的应用程序,资源监控开启了 WebSphere MQ FTE 应用的新领域,这些新应用是 V7.0.1 之前的版本所不能实现的。本文描述的场景不可能涵盖资源监控功能的所有应用和变化,但您可以从中体会 WebSphere MQ FTE 中的资源监控功能的强大力量。

参考资料

学习

获得产品和技术

讨论

  • WebSphere 论坛
    特定于产品的论坛,可以在此获得技术问题的答案,并与其他 WebSphere 用户分享您的专业经验。
  • developerWorks 博客
    加入 developerWorks 用户和作者、IBM 编辑和开发人员的谈话。
  • developerWorks 播客
    收听新颖有趣的软件创新者访谈和讨论。
  • WebSphere 相关活动
    世界各地针对 WebSphere 开发人员的会议、商业展览、网络广播和其他活动。
  • developerWorks 技术活动和网络广播
    由 IBM 专家主持的免费技术活动可以帮助您加快学习进度,在最困难的软件项目中取得成功。这些在世界各地举行的活动包括一小时的网络广播、半天到全天的现场会议等。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=464070
ArticleTitle=WebSphere MQ File Transfer Edition 中的资源监控功能
publish-date=01252010