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 - 千兆字节
- <pattern>
- 要匹配的文件名模式。 缺省值为 *(任何文件都将匹配)。
- <queueNotEmpty>
- 只能在资源是队列时指定此属性。 指定要触发监视器,队列上必须有消息。
- <completeGroups>
- 只能在资源是队列时指定此属性。 指定要触发监视器,队列上必须有完整的一组消息。 针对队列上每个完整的组执行一项传输任务。
- <reply>
- 可选元素,用于为异步请求指定应答队列。
属性 描述 QMGR 队列管理器名称。 - <tasks>
- 组元素,包含的元素可指定在满足监视器触发器条件时要调用的任务。
- <task>
- 组元素,定义在满足触发器条件时监视器将调用的个别任务。 当前只能指定一项任务。
- <name>
- 任务的名称。 接受任何字母数字字符。
- <description>
- 任务的描述。 允许任何文本值。
- <transfer>
- 用于定义传输任务的组元素。
- <request>
- 用于定义任务类型的组元素。 这必须包含从 FileTransfer.xsd 模式定义继承的以下其中一个元素:
- managedTransfer
- managedCall
属性 描述 版本 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 在其上生成临时动态队列以接收应答的命令队列管理器的名称。