MFT 监视器请求消息格式

当合适的 XML 消息到达代理的命令队列时 (通常是由于用户发出 fteCreateMonitor 命令或使用 IBM® MQ Explorer 接口) ,将创建资源监视器。

监视器 XML 必须符合 Monitor.xsd 模式(即,将 <monitor> 元素用作根元素)。

监视器消息可以具有下列其中一个根元素:
  • <monitor> - 用于创建和启动新的资源监视器
  • <deleteMonitor> - 用于停止和删除现有监视器

fteListMonitors 命令没有命令消息,因为该命令直接从 SYSTEM.FTE 主题。

模式

以下模式描述了监视器请求 XML 消息中哪些元素有效。

<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema" 
            targetNamespace="https://www.ibm.com/xmlns/wmqfte/7.0.1/MonitorDefinition" 			
            xmlns="https://www.ibm.com/xmlns/wmqfte/7.0.1/MonitorDefinition">  	

<xsd:include schemaLocation="FileTransfer.xsd" /> 

    <xsd:element name="monitor"> 		
        <xsd:complexType> 			
            <xsd:sequence> 				
                <xsd:element name="name"             type="monitorNameType"	
                             minOccurs="1"           maxOccurs="1" /> 				
                <xsd:element name="description"      type="xsd:string" 
                             minOccurs="0"           maxOccurs="1" /> 				
                <xsd:element name="pollInterval"     type="pollIntervalType" 
                             minOccurs="1"           maxOccurs="1" default="10" /> 				
                <xsd:element name="batch"            type="batchType" 
                             minOccurs="0"           maxOccurs="1" /> 				
                <xsd:element name="agent"            type="agentNameType"
                             minOccurs="1"           maxOccurs="1" /> 				
                <xsd:element name="resources"        type="monitorResourcesType" 
                             minOccurs="0"           maxOccurs="1" /> 				                
                <xsd:element name="triggerMatch"     type="triggerMatchType" 
                             maxOccurs="1"           minOccurs="1" /> 				
                <xsd:element name="reply"            type="replyType" 
                             maxOccurs="1"           minOccurs="0" /> 				
                <xsd:element name="tasks"            type="monitorTasksType" 
                             maxOccurs="1"           minOccurs="1" /> 	            
                <xsd:element name="originator"       type="origRequestType" 
                             maxOccurs="1"           minOccurs="1"/>
                <xsd:element name="job"              type="jobType" 
                             maxOccurs="1"           minOccurs="0"/>             	
                <xsd:element name="defaultVariables" type="defaultVariablesType" 
                             maxOccurs="1"           minOccurs="0"/> 			
            </xsd:sequence> 			
            <xsd:attribute name="version" type="versionType" use="required" /> 		
        </xsd:complexType> 	
    </xsd:element> 	 	

    <xsd:element name="deleteMonitor"> 		
        <xsd:complexType> 			
            <xsd:sequence> 				
                <xsd:element name="name"       type="monitorNameType" 
                             minOccurs="1"     maxOccurs="1" /> 	            
                <xsd:element name="originator" type="origRequestType" 
                             maxOccurs="1"     minOccurs="1"/> 				
                <xsd:element name="reply"      type="replyType"      
                             maxOccurs="1"     minOccurs="0" /> 			
            </xsd:sequence> 			
            <xsd:attribute name="version" type="versionType" use="required" /> 		
        </xsd:complexType> 	
    </xsd:element> 	 	

    <xsd:complexType name="transferRequestType"> 		
        <xsd:choice> 			
            <xsd:element name="managedTransfer" type="managedTransferType" /> 			
            <xsd:element name="managedCall"     type="managedCallType" /> 		
        </xsd:choice> 		
        <xsd:attribute name="version" type="versionType" /> 	
    </xsd:complexType> 	 	

    <xsd:complexType name="monitorResourcesType">
  <xsd:choice>  
    <xsd:sequence>
      <xsd:element name="directory" type="monitoredDirectoryType"
              minOccurs="1"    maxOccurs="1" />
     </xsd:sequence>
     <xsd:element name="queue" type="monitoredQueueType"/>
   </xsd:choice>
</xsd:complexType>	 	

    <xsd:complexType name="monitoredDirectoryType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:string"> 				
                <xsd:attribute name="recursionLevel" type="xsd:nonNegativeInteger" /> 				
                <xsd:attribute name="id" type="resourceIdAttrType" /> 			
            </xsd:extension> 		
        </xsd:simpleContent> 	
    </xsd:complexType>  	

    <xsd:complexType name="monitoredQueueType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:string"> 				
                <xsd:attribute name="id" type="resourceIdAttrType" /> 			
            </xsd:extension> 		
        </xsd:simpleContent> 	
    </xsd:complexType>  	

    <xsd:complexType name="triggerMatchType"> 		
        <xsd:sequence> 			
            <xsd:element name="conditions" type="conditionsType" 				
                         minOccurs="1"     maxOccurs="1" /> 		
        </xsd:sequence> 
    </xsd:complexType> 	  	 

    <xsd:complexType name="conditionsType"> 		
        <xsd:choice minOccurs="1"> 			
            <xsd:element name="allOf"     type="listPredicateType" 				
                         minOccurs="1"    maxOccurs="1" /> 			
            <xsd:element name="anyOf"     type="listPredicateType" 				
                         minOccurs="1"    maxOccurs="1" /> 			
            <xsd:element name="condition" type="conditionType" 				
                         minOccurs="1"    maxOccurs="1" /> 		
        </xsd:choice> 
    </xsd:complexType>

    <xsd:complexType name="listPredicateType">
        <xsd:choice>
            <xsd:element name="condition" type="conditionType" 				
                         minOccurs="1"    maxOccurs="unbounded" /> 		
        </xsd:choice> 
    </xsd:complexType> 	 	

    <xsd:complexType name="conditionType"> 		
        <xsd:sequence> 			
            <xsd:element name="name"     type="conditionNameType" 				
                         minOccurs="0"   maxOccurs="1" /> 			
            <xsd:element name="resource" type="resourceIdType" 				
                         minOccurs="0"   maxOccurs="1" /> 			
            <xsd:choice minOccurs="1"> 				
                <xsd:element name="fileMatch"       type="fileMatchConditionType" 					
                             minOccurs="1"          maxOccurs="1" /> 				
                <xsd:element name="fileNoMatch"     type="fileNoMatchConditionType" 					
                             minOccurs="1"          maxOccurs="1" />					 				
                <xsd:element name="fileSize"        type="fileSizeConditionType" 					
                             minOccurs="1"          maxOccurs="1" /> 				
                <xsd:element name="queueNotEmpty"   type="queueNotEmptyConditionType" 					
                             minOccurs="1"          maxOccurs="1" /> 				
                <xsd:element name="completeGroups"  type="completeGroupsConditionType" 					
                             minOccurs="1"          maxOccurs="1" /> 				
                <xsd:element name="fileSizeSame"    type="fileSizeSameType" 				
                             minOccurs="1"          maxOccurs="1"/> 			
            </xsd:choice> 		
        </xsd:sequence> 	
    </xsd:complexType> 

    <xsd:complexType name="fileMatchConditionType"> 		
        <xsd:sequence> 			
            <xsd:element name="pattern" type="conditionPatternType" 		    
                         minOccurs="0"  default="*.*" /> 			
            <xsd:element name="exclude" type="conditionPatternType" 
                         minOccurs="0"  maxOccurs="1"/> 		
        </xsd:sequence> 	
    </xsd:complexType> 	 		

    <xsd:complexType name="fileNoMatchConditionType"> 		
        <xsd:sequence> 			
            <xsd:element name="pattern" type="conditionPatternType" 				
                         minOccurs="0"  default="*.*" /> 			
            <xsd:element name="exclude" type="conditionPatternType" 
                         minOccurs="0"  maxOccurs="1"/>				 		
        </xsd:sequence> 	
    </xsd:complexType>		 
	 	
    <xsd:complexType name="fileSizeConditionType"> 		
        <xsd:sequence> 			
            <xsd:element name="compare" type="sizeCompareType" 				
                         minOccurs="1"  default="0" /> 			
            <xsd:element name="pattern" type="conditionPatternType" 				
                         minOccurs="0"  default="*.*" /> 			
            <xsd:element name="exclude" type="conditionPatternType" 
                         minOccurs="0"  maxOccurs="1"/> 		
        </xsd:sequence> 	
    </xsd:complexType> 	 	

    <xsd:complexType name="sizeCompareType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:int"> 				
                <xsd:attribute name="operator" type="sizeOperatorType"  use="required" /> 				
                <xsd:attribute name="units"    type="fileSizeUnitsType" use="required" /> 			
            </xsd:extension> 		
        </xsd:simpleContent> 	
    </xsd:complexType>            

    <xsd:simpleType name="sizeOperatorType"> 		
        <xsd:restriction base="xsd:string"> 			
            <xsd:enumeration value=">=" /> 		
        </xsd:restriction> 	
    </xsd:simpleType> 	 

    <xsd:simpleType name="fileSizeUnitsType"> 		
        <xsd:restriction base="xsd:string"> 			
            <xsd:pattern value="[bB]|[kK][bB]|[mM][bB]|[gG][bB]" /> 		
        </xsd:restriction> 	
    </xsd:simpleType> 	 	

    <xsd:complexType name="conditionPatternType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:string"> 				
                <xsd:attribute name="type"    type="patternTypeAttributeType" 
                               use="optional" default="wildcard"/> 			
            </xsd:extension> 		
        </xsd:simpleContent>		 	
    </xsd:complexType>  	 	

    <xsd:simpleType name="patternTypeAttributeType"> 		
        <xsd:restriction base="xsd:token"> 			
            <xsd:enumeration value="regex" /> 			
            <xsd:enumeration value="wildcard" /> 		
        </xsd:restriction> 	
    </xsd:simpleType> 	 	

    <xsd:complexType name="conditionNameType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:string" /> 		
        </xsd:simpleContent> 	
    </xsd:complexType>  	

    <xsd:complexType name="queueNotEmptyConditionType"/> 	 	
	
    <xsd:complexType name="completeGroupsConditionType"/> 	 	
    
    <xsd:complexType name="fileSizeSameType"> 		
        <xsd:sequence> 			
            <xsd:element name="pattern" type="conditionPatternType" 
                         minOccurs="1"  maxOccurs="1"/> 			
            <xsd:element name="exclude" type="conditionPatternType" 
                         minOccurs="0"  maxOccurs="1"/> 		
        </xsd:sequence> 		
        <xsd:attribute name="polls" type="positiveIntegerType" use="required" /> 
    </xsd:complexType> 	 

    <xsd:complexType name="pollIntervalType"> 		
        <xsd:simpleContent> 			
            <xsd:extension base="xsd:int"> 				
                <xsd:attribute name="units"    type="timeUnitsType" 
                               use="optional"  default="minutes" /> 			
             </xsd:extension> 		
        </xsd:simpleContent> 	
    </xsd:complexType> 	 	

    <xsd:complexType name="batchType"> 		
        <xsd:attribute name="maxSize" type="positiveIntegerType" use="required"/> 	
    </xsd:complexType> 	 	

    <xsd:simpleType name="timeUnitsType"> 		
        <xsd:restriction base="xsd:token"> 			
            <xsd:enumeration value="seconds" /> 			
            <xsd:enumeration value="minutes" /> 			
            <xsd:enumeration value="hours" /> 			
            <xsd:enumeration value="days" /> 			
            <xsd:enumeration value="weeks" /> 			
            <xsd:enumeration value="months" /> 			
            <xsd:enumeration value="years" /> 		
        </xsd:restriction> 	
    </xsd:simpleType> 	 	

    <xsd:complexType name="monitorTasksType"> 		
        <xsd:sequence> 			
            <xsd:element name="task"   type="monitorTaskType" 				
                         minOccurs="1" maxOccurs="1" /> 		
        </xsd:sequence> 	
    </xsd:complexType> 	 	

    <xsd:complexType name="monitorTaskType"> 		
        <xsd:sequence> 			
            <xsd:element name="name"        type="monitorTaskNameType" 				
                         minOccurs="1"      maxOccurs="1" /> 			
            <xsd:element name="description" type="xsd:string" 				
                         minOccurs="0"      maxOccurs="1" /> 			
            <xsd:element name="transfer"    type="transferTaskType" 				
                         minOccurs="0"      maxOccurs="1" /> 		
        </xsd:sequence> 	
    </xsd:complexType> 	 

    <xsd:complexType name="transferTaskType"> 		
        <xsd:sequence> 			
            <xsd:element name="request"  type="transferRequestType" 				
                         minOccurs="1"   maxOccurs="1" /> 		
        </xsd:sequence> 	
    </xsd:complexType>  

    <xsd:complexType name="resourceIdType"> 		
        <xsd:attribute name="id" type="xsd:string" use="optional" /> 	
    </xsd:complexType> 	

    <xsd:simpleType name="resourceIdAttrType"> 		
        <xsd:restriction base="xsd:string"></xsd:restriction> 	
    </xsd:simpleType>  	 	

    <xsd:simpleType name="monitorNameType"> 		
        <xsd:restriction base="xsd:string"> 			
            <xsd:pattern value="[^%\*]+" /> 		
        </xsd:restriction> 	
    </xsd:simpleType>      	 

    <xsd:simpleType name="agentNameType"> 		
        <xsd:restriction base="xsd:string"> 			
            <xsd:pattern value="[.%_0-9A-Z]*" /> 		
        </xsd:restriction> 	
    </xsd:simpleType>  	 	

    <xsd:simpleType name="monitorTaskNameType"> 		
        <xsd:restriction base="xsd:string"> 			
            <xsd:pattern value=".*" /> 		
        </xsd:restriction> 	
    </xsd:simpleType> 	 	

    <xsd:complexType name="defaultVariablesType">         
        <xsd:sequence>                 
            <xsd:element name="variable"       type="variableType" 
                         maxOccurs="unbounded" minOccurs="1" />         
        </xsd:sequence>     
    </xsd:complexType>          
    
    <xsd:complexType name="variableType">                 
        <xsd:simpleContent>                 
            <xsd:extension base="xsd:string">                         
                <xsd:attribute name="key" type="xsd:string" use="required" />                 
            </xsd:extension>         
        </xsd:simpleContent>     
    </xsd:complexType>

</xsd:schema>

IBM MQ 9.3.0开始, directory 元素的 maxOccurs 属性设置为 1。 此属性先前已设置为 unbounded,这指示可能有多个 directory 条目。 但是,这是不正确的,因为创建用于监视目录的资源监视器时只能指定一个目录。

创建监视消息元素

以下元素和属性用于创建监视器消息:

<monitor>
包含取消正在进行的文件传输所需的所有元素的组元素。
属性 描述
版本 指定 Managed File Transfer提供的此元素的版本。
<name>
监视器的名称,在监视器代理内是唯一的。
<description>
监视器的描述(当前未使用)。
<pollInterval>
每次针对触发器条件检查资源的时间间隔。
属性 描述
units 指定轮询时间间隔的时间单位。 有效值包括:
  • 分钟
  • 小时
  • days
  • weeks
  • months
  • years
<agent>
与监视器相关联的代理的名称。
<resources>
组元素,包含用于指定要监视的资源的元素。
<directory>
标准路径,用于指定要监视的监视器代理机器上的目录。
属性 描述
recursionLevel 除指定目录外,要监视的子目录数。
标识 资源的唯一标识。
<queue>
队列名称,用于指定要在监视代理的队列管理器上监视的队列。
<triggerMatch>
组元素,包含的元素用于指定要与受监视资源相比较的触发器条件。
<conditions>
组元素,包含的元素用于指定要与受监视资源相比较的条件的类型。
<allOf>
谓词,用于指定必须满足包含的所有条件。
<anyOf>
谓词,用于指定必须满足包含的任意条件。
<condition>
定义将促成整个监视器触发器条件的比较条件。
<name>
条件的名称。
<resource>
标识要与条件相比较的资源定义。
属性 描述
标识 资源的唯一标识。
如果正在监视的资源是一个目录,那么必须在条件中指定以下三个元素中的一个:
  • fileMatch
  • fileNoMatch
  • fileSize
如果监视中的资源是队列,那么必须在条件中指定以下两个元素中的一个:
  • queueNotEmpty
  • completeGroups
<fileMatch>
文件名匹配条件的组元素。
<pattern>
指定文件名匹配模式。 资源上的文件必须与模式相匹配才能满足条件。 缺省模式为 *(任何文件都将匹配)。
<fileNoMatch>
逆文件名匹配条件的组元素。
<pattern>
指定逆文件名匹配模式。 如果受监视资源上的所有文件均不匹配,那么满足条件。 缺省模式为 *(缺少任何文件都将匹配)。
<fileSize>
文件大小比较的组元素。
<compare>
指定文件大小比较。 该值必须是非负整数。
属性 描述
操作员 要使用的比较运算符。 仅支持> = '。
units 指定文件大小单位,可以是以下其中一项:
  • B - 字节
  • KB - 千字节
  • MB - 兆字节
  • GB - 千兆字节
单位值不区分大小写,因此 mb' 与 MB' 作用相同。
<pattern>
要匹配的文件名模式。 缺省值为 *(任何文件都将匹配)。
<queueNotEmpty>
只能在资源是队列时指定此属性。 指定要触发监视器,队列上必须有消息。
<completeGroups>
只能在资源是队列时指定此属性。 指定要触发监视器,队列上必须有完整的一组消息。 针对队列上每个完整的组执行一项传输任务。
<reply>
可选元素,用于为异步请求指定应答队列。
属性 描述
QMGR 队列管理器名称。
<tasks>
组元素,包含的元素可指定在满足监视器触发器条件时要调用的任务。
<task>
组元素,定义在满足触发器条件时监视器将调用的个别任务。 当前只能指定一项任务。
<name>
任务的名称。 接受任何字母数字字符。
<description>
任务的描述。 允许任何文本值。
<transfer>
用于定义传输任务的组元素。
<request>
用于定义任务类型的组元素。 这必须包含从 FileTransfer.xsd 模式定义继承的以下其中一个元素:
属性 描述
版本 Managed File Transfer提供的请求版本。 这采用 n.mm 格式,其中 n 是主要发行版本,mm 是次要版本。 例如,1.00。
<originator>
包含指定请求发起方的元素的组元素。
<hostName>
源文件所在系统的主机名。
<userID>
发起文件传输的用户标识。
<mqmdUserID>
可选。 消息描述符 (MQMD) 中提供的 IBM MQ 用户标识。
<job>
包含作业信息的组元素。
<jobName>
指定逻辑作业标识。
<defaultVariables>
包含一个或多个 variable 元素的组元素。 监视队列时,将在变量替换中使用这些变量。 有关变量替换的更多信息,请参阅 使用变量替换定制 MFT 任务
<variable>
元素,包含与 key 属性提供的键相关联的值。
属性 描述
key 缺省变量的名称。

删除监视消息元素

在删除监视器消息中使用以下元素和属性:

<deleteMonitor>
组元素,包含停止和删除监视器所需的所有元素。
属性 描述
版本 指定 Managed File Transfer提供的此元素的版本。
<name>
要删除的监视器的名称。
<originator>
包含指定请求发起方的元素的组元素。
<hostName>
源文件所在系统的主机名。
<userID>
发起文件传输的用户标识。
<mqmdUserID>
可选。 消息描述符 (MQMD) 中提供的 IBM MQ 用户标识。
<reply>
指定为请求生成的临时应答队列的名称。 队列的名称由 command.properties 配置文件中的键 dynamicQueuePrefix 定义。 如果未指定,那么队列名称的缺省值为 WMQFTE
属性 描述
QMGR 在其上生成临时动态队列以接收应答的命令队列管理器的名称。

示例

针对以下每项监视器请求提供了符合该模式的 XML 消息的示例: