WebSphere MQ FTE 中的资源监控功能

简介:
   WebSphere MQ File Transfer Edition(以下简称 WebSphere MQ FTE)在多个 IT 系统之间提供无需编程的可靠的、可审计的和可管理的文件传输,并且对文件大小没有限制。本文将向您描述几个场景,以展示如何使用 WebSphere MQ FTE 资源监控功能。
资源监控概述:
    资源监控功能是 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=/}}
目标 Qmgr DESTINATIONAGENT ${FilePath{token=-2}{separator=/}}
目标文件名 C:\destination\destinationfile.txt C:/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 中的资源监控功能的强大力量。

猜你喜欢

转载自lcm.iteye.com/blog/1773284