监控事件是 IBM® WebSphere® Message Broker V6.1.0.3 或更新版本(此后称作 Message Broker)中的新特性。此特性允许您配置消息流以生成监控事件,而不需要编写任何代码。当经过配置的事件出现在消息流中之后,托管消息流的代理会生成 XML 文档并将其作为预定义的主题发布。这些事件可以由 WebSphere Business Monitor 等应用程序读取和使用,用于跟踪和报告消息流的事务级性能数据,以及支持事务监控、事务审计和业务流程监控,如图 1 所示:
图 1. 监控事件的概念视图

读者应该具备一定的 Message Broker 经验,并且知道如何创建和部署消息流。
可以在节点级配置消息流以生成监控事件。监控事件的表示形式是符合 监控事件模式 的 XML 文档。每个事件都包含以下信息:
- 事件源 (eventSourceAddress)
- 事件名称 (eventName)
- 创建时间 (creationTime)
- 相同事务或工作单元生成的事件的关联 ID (localTransactionId、parentTransactionId 和 globalTransactionId)
- 消息流的详细信息 (messageFlowData)
或者,监控事件还可以包含以下信息:
- 从消息中提取的应用程序数据 (applicationData)
- 消息比特流的部分或全部 (bitstream)
预定义的 Message Broker 事件模式 WMBEvent.xsd 用于定义监控事件的结构。要检索 WMBEvent.xsd 文件:
- 在 Message Broker Toolkit 的 Application Development 透视图中,右键单击消息集项目下的消息集(如果没有,可以创建一个新的消息集),并选择 New => Message Definition File From => IBM Supplied Message。
- 在打开的窗口中,向下滚动 IBM 提供的消息列表并选择 Message Broker Monitoring Event,然后单击 Finish。您应该可以在 com.ibm.www.xmlns.prod.websphere.messagebroker._610.monitoring.event 包下看到 WMBEvent.mxsd 文件。
- 再次右键单击消息集并选择 Generate => XML Schemas。
- 在 Generate XML Schemas 窗口中,选择希望将模式文件导出到其中的外部目录。
- 单击 Finish。该目录中将创建一个包含 WMBEvent.xsd 文件的 zip 文件。
您可以配置消息流来生成两种事件:事务事件和终端事件。共有三种类型的事件:start、end 和 rollback。事务事件仅由输入节点生成,比如说 MQInput 和 HTTPInput。终端事件可由任意节点的任意终端生成。
监控事件特性将利用 Message Broker 的发布/订阅 (pub/sub) 机制。事件消息将被发布到特定的主题,可以通过订阅应用程序来注册它。主题名称的形式如下:
$SYS/Broker/<brokerName>/Monitoring/<executionGroupName>/<flowName> |
主题层次结构支持通过订阅应用程序来过滤事件。举例来说,一个应用程序可以从部署在代理中的所有执行分组中的所有消息流接收事件,而另一个应用程序只能接收单个执行分组中的所有消息流的事件。
如前所述,您可以进行配置,使监控事件的生成不需要编写任何代码。本节将通过一个示例来演示如何配置和监控消息流中的事件,以及如何使用这些事件。要运行此示例,您需要部署消息流 Message Broker V6.1.0.3 或更新版本。在本文中,所有命令都使用代理名 BRK1 和执行组名 default。本节中的高级步骤如下:
- 创建消息流
- 设置监控属性
- 部署消息流
- 启用事件源
- 激活事件
- 订阅事件
图 2 显示了 Message Broker Project Interchange 文件 MonitoringEvents_PI.zip 所提供的预建消息流,您可以 从此处下载该文件,其中还包括其他一些工件,比如消息集、BAR 文件、监控事件模式和测试消息。这个简单的消息流并未包含错误处理例程,用于演示如何配置和生成监控事件。它将在一个输入队列中接收 XML 消息,用于请求温度换算服务。该服务提供在 Web 上: Visual DataFlex 温度换算 Web 服务。它会根据输入消息的内容使用 HTTP Request 节点 HTTP_Request_C2F 调用从 Celsius 到 Fahrenheit 的换算服务,或者使用节点 HTTP_Request_F2C 调用从 Fahrenheit 到 Celsius 的换算服务。服务请求的响应将返回在一个输出队列中。有关更多信息,请参阅 Message Broker 信息中心中的 创建消息流。
图 2. 消息流 MonitoringEvents_MF

表 1 描述了节点连接:
表 1. 消息流上的节点连接的详细信息
| NodeName | NodeType | Terminal | To | NodeName | NodeType | Terminal |
|---|---|---|---|---|---|---|
| QIN | MQInput | Out | => | Build_HTTP_Request_Msg | Compute | In |
| Build_HTTP_Request_Msg | Compute | Out | => | HTTP_Request_C2F | HTTPRequest | In |
| Build_HTTP_Request_Msg | Compute | Out1 | => | HTTP_Request_F2C | HTTPRequest | In |
| HTTP_Request_C2F | HTTPRequest | Out | => | Build_MQ_Response_Msg | Compute | In |
| HTTP_Request_F2C | HTTPRequest | Out | => | Build_MQ_Response_Msg | Compute | In |
| Build_MQ_Response_Msg | Compute | Out | => | QOUT | MQOutput | In |
您可以使用监控属性或监控配置文件来设置监控事件。在本节中,您将使用监控属性来配置消息流的监控事件,如下所示。使用监控配置文件配置事件源 小节详细讨论了监控配置文件。要配置的监控事件包括所有事务事件,MQInput 节点 QIN 上的 Start、End 和 Rollback,以及各个 HTTP Request 节点上的终端事件 In 和 Out。
- 在 Message Broker Toolkit 的 Broker Application Development 透视图中,使用 Message Flow Editor 打开 MonitoringEvents_MF 消息流。
- 在 MQInput 节点 QIN 的属性的 Monitoring 选项卡中,单击 Add 配置事件流,如图 3 所示:
图 3. 监控 MQInput 节点 QIN 的属性

- 从事件源列表中选择 Transaction Start。当消息经过流的输入节点时会触发此事件。将事件的字面名称从默认的 QIN.TransactionStart 更改为 FlowStart,如图 4 所示。当然,可以选择消息集合中的消息树中的字符字段作为事件名称。
图 4. 在 MQInput 节点 QIN 上添加一个事务事件

- 对于 Event Payload,单击 Add 从输入消息树的简单或复杂字段中选择性地获取数据。如下面的图 5 所示,对数据位置单击 Edit 之后将打开 XPath Expression Builder 页面,您可以向输入消息添加数据类型。为了能够在 Data Type Viewer 中看到它,本例中的输入消息 TemperatureConversion 必须内置在消息集 (MRM) 中。如果不是这样,则需要手动将值键入到 XPath Expression 中。
图 5. 向输入消息添加数据类型

- 如下面的图所示,为便于演示,我们使用 XPath 表达式同时选择了消息主体中的复杂字段 TemperatureConversion 以及 MQMD 头部中的简单字段 MsgID。有效负荷比特流数据还包含在监控事件中。请记住,添加较大的有效负荷和比特流会降低性能。
图 6. 事务事件 FlowStart 的事件有效负荷数据

- 选择 Correlation 选项卡定义关联器,监控应用程序将使用它匹配流事务中生成的多个事件。本地事务关联器将链接单一消息流调用生成的事件。父事务关联器将消息流中的事件链接到父消息流或外部应用程序。全局事务关联器将消息流中的事务链接到一个或多个相关消息流或外部应用程序。为所有关联器接受默认值 Automatic,这会让 Message Broker 生成一个惟一的 36 字符长的关联器(各级别事务中的事件均与此相同)。
图 7. 事件关联

- 选择 Sequence 选项卡。监控应用程序将使用事件序列重新对事件消息排序,因为事件将以不可预测的顺序发布。在 Message Broker V6.1.0.3 中,使用创建时间以 yyyy-mm-ddThh:mm:ss.fff 格式设置事件序列。
图 8. 事件序列

- 重复上面的步骤 3 到步骤 7,添加事务事件 Transaction 结束和 Transaction 回滚,并为 HTTP_Request_C2F 和 HTTP_Request_F2C 节点添加 in 和 out 终端事件。仅 MQMD 头部中的 MsgID 被添加到这些事件的有效负荷数据中。事件设置的汇总如下表所示:
NodeName EventName EventSource Payload Bitstream TransactionCorrelator Sequence QIN FlowStart Transaction.start $Root/MQMD/MsgId $Body/Temperature Conversion All(base64Binary) Local - AutomaticParent - AutomaticGlobal - Automatic Creation time QIN FlowEnd Transaction.end $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time QIN FlowRollback Transaction.rollback $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time HTTP_Request_C2F In_C2F In.terminal $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time HTTP_Request_C2F Out_C2F Out.terminal $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time HTTP_Request_F2C In_F2C In.terminal $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time HTTP_Request_F2C Out_F2C Out.terminal $Root/MQMD/MsgId - Local - AutomaticParent - AutomaticGlobal - Automatic Creation time - 在 Message Flow Editor 的 Message Flow 属性窗口中单击监控选项卡。所有配置的事件都将被列出,如下面的图 9 所示。这些事件全部默认为启用:
图 9. 已配置的监控事件列表

使用代理存档 (BAR) 文件将消息流默认部署到代理 BRK1 上的执行分组。在此代理上运行下节描述的所有命令。如果您 下载了下面的示例解决方案,并将它部署到了具有不同执行分组和代理名称的环境中,则需要做一些更改。有关更多信息,请阅读 Message Broker 信息中心上的 将消息流部署到代理上的执行分组。
如上所述,默认情况下,消息流中所有经过配置的事件都将启用。您可以在 Message Flow Editor 中使用 Message Broker Toolkit 启用或禁用这些事件。如果消息流已经被部署到某执行分组中,则必须重新部署流以便让监控事件更改生效。您可以使用命令 mqsichangeflowmonitoring 来启用或禁用事件,而不需要重新部署消息流。更改将在运行时立即生效。比如,
mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s "QIN.transaction.start,QIN.transaction.end,QIN.transaction.rollback" -i enable |
mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s "HTTP_Request_C2F.terminal.in,HTTP_Request_C2F.terminal.out" -i disable |
配置了事件源之后,运行以下命令以便激活监控引擎并生成事件消息:
mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -c active |
相反,要禁用消息流监控流程,使用参数 -c inactive 运行相同的命令。
停止并重新启动代理之后,事件激活状态不会更改。要检查监控的状态,包括节点启用状态,可以使用以下命令:
mqsireportflowmonitoring BRK1 -e default -f MonitoringEvents_MF -a |
当所配置的监控事件发生时,会发布采用以下主题格式的事件消息:
$SYS/Broker/<BrokerName>/Monitoring/<ExecutionGroupName>/<MessageFlowName> |
在本例中为
$SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF |
主题是区分大小写的。在接收事件消息之前,需要订阅主题,这可以通过使用 rfhutil 工具和消息流来实现。
使用 rfhutil 工具
您可以从 IBM Message Broker SupportPac 站点下载免费的 Message Broker 显示、测试和性能工具 rfhutil,并使用它订阅事件。要使用该工具订阅主题:
- 打开 rfhutil 工具并单击 Pub/Sub 选项卡。
- 为 Request Type 选择 Sub
- 在 Topic(s) 字段中键入 $SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF
- 在 Subscription Queue Manager 字段中键入 WMBQM
- 在 Subscription Queue 字段中键入 QSUB
- 单击 Write Msg:
图 10. 使用 rfhutil 工具订阅事件主题

通过与订阅相似的流程,您可以使用 rfhutil 工具取消对主题的订阅,惟一的不同是在上面的第 2 步中需要为 Type 选择 Unsub,而不是 Sub。
使用消息流
您可以创建一个简单的消息流,如图 11 所示,用于通过编程的方式订阅或取消订阅主题:
图 11. 用于订阅主题的消息流

一条包含如下所示的订阅和取消订阅数据的输入 XML 消息将被发送给队列 QSUB。使用 Compute 节点根据输入消息在 MQRFH2 头部下建立一个 pub/sub 命令。该命令将发送给系统队列 SYSTEM.BROKER.CONTROL.QUEUE,而 Message Broker pub/sub 引擎将处理该列表中的命令消息来生成主题订阅。
清单 1. 订阅消息
<SubMsg> <Command>RegSub</Command> <Topic>$SYS/Broker/BRK1/Monitoring/default/MonitoringEvents_MF</Topic> <QMgrName>WMBQM</QMgrName> <QName>QEVENT</QName> </SubMsg> |
要取消订阅一个主题,将以上 XML 消息的 Command 元素从 RegSub 更改为 DeregSub。要检查主题订阅,在 Message Broker Toolkit 的 Broker Administration 透视图左下角的 Domains 面板中单击 Subscriptions。单击 Query 显示主题列表,其中包括所订阅的主题:
图 12. 订阅主题列表

以下场景用于生成消息流上配置的监控事件。要运行测试,应确保 Message Broker 服务器所在的机器具备 internet 连接,并且可以使用 用于温度换算的 Visual DataFlex Web 服务。
- 使用正确输入消息的成功事务如下面的清单 2 或 3 所示。
- 清单 4 显示了一个未完成的事务,无效输入消息造成了一个异常。
清单 2. 测试消息 C2F.xml
<?xml version="1.0" encoding="UTF-8"?> <TemperatureConversion> <Input> <Unit>Celsius</Unit> <Degree>28.5</Degree> </Input> <Output> <Unit></Unit> <Degree></Degree> </Output> </TemperatureConversion> |
清单 3. 测试消息 F2C.xml
<?xml version="1.0" encoding="UTF-8"?> <TemperatureConversion> <Input> <Unit>Fahrenheit</Unit> <Degree>80</Degree> </Input> <Output> <Unit></Unit> <Degree></Degree> </Output> </TemperatureConversion> |
清单 4. 测试消息 Invalid.xml
<?xml version="1.0" encoding="UTF-8"?> <TemperatureConversion> <Input> <Unit>Wrong</Unit> <Degree>80</Degree> </Input> <Output> <Unit></Unit> <Degree></Degree> </Output> </TemperatureConversion> |
使用 rfhutil 工具发送一条消息到输入队列 QIN 中。
- 打开 rfhutil 并选择队列管理器,比如 WMBQM,以及队列 QIN。
- 单击 Open File 导入测试消息文件,比如 C2F.xml。在选择 Data 选项卡时应该可以看到测试消息。
- 选择 Main 选项卡并选择 Write Q。测试消息将发送给队列 QIN,以调用消息流。
- 在生成的 QEVENT 中检查用于监控事件的消息。
将用于从 Celsius 到 Fahrenheit 的温度换算的测试消息发送给输入 QIN。和预期一样,事务生成了 FlowStart 和 FlowEnd 两个事务事件,以及 In_C2F 和 Out_C2F 两个终端事件。订阅队列 QEVENT 将接收这些事件消息。各消息的本地事务 ID 相同,父事务及全局事务的 ID 也是如此。有效负荷数据及其比特流包含在事务 FlowStart 的 XML 消息中,如清单 5 所示:
清单 5. FlowStart 的事件消息
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0/monitoring/event">
<wmb:eventPointData>
<wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3"
wmb:eventSourceAddress="QIN.transaction.Start">
<wmb:eventIdentity wmb:eventName="FlowStart"/>
<wmb:eventSequence wmb:creationTime="2009-10-08T02:16:14.500"/>
<wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454"
wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d"
wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
<wmb:eventData/>
<wmb:messageFlowData>
<wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
<wmb:executionGroup wmb:name="default"
wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
<wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF"
wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0"
wmb:threadId="9316"/>
<wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>
<wmb:messageFlowData/>
</wmb:eventPointData>
<wmb:applicationData>
<wmb:simpleContent wmb:name="MsgId"
wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112"
wmb:dataType="hexBinary"/>
</wmb:applicationData>
<wmb:bitstreamData>
<wmb:bitstream wmb:encoding="base64Binary">TUQgIAIAAAAAAAAACAAAAP////8AAAAAIgIAALUBAAA
gICAgICAgIAAAAAAAAAAAQU1RIFdNQlFNICAgICAgIL5WykogL+ESAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNQlFNICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYW4gICAgICAgIBYBBRUAAACEYU++63/
PV2Bwonj0AQAAAAAAAAAAAAALICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICALAAAAQzpcTXlCaW5
ccmZodXRpbFxyZmh1dGlsLmV4ZTIwMDkxMDA4MDIxNjE0NTEgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAQAAAAAAAAAAAAAA/////zw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQo8VGVtcGV
yYXR1cmVDb252ZXJzaW9uPg0KICA8SW5wdXQ+DQogICAgPFVuaXQ+Q2Vsc2l1czwvVW5pdD4NCiAgICA8RGV
ncmVlPjI4LjU8L0RlZ3JlZT4NCiAgPC9JbnB1dD4NCiAgPE91dHB1dD4NCiAgICA8VW5pdD48L1VuaXQ+DQo
gICAgPERlZ3JlZT48L0RlZ3JlZT4NCiAgPC9PdXRwdXQ+DQogIDxFcnJvcj4NCiAgICA8Q29kZT48L0NvZGU
+DQogICAgPERlc2M+PC9EZXNjPg0KICA8L0Vycm9yPg0KPC9UZW1wZXJhdHVyZUNvbnZlcnNpb24+DQo=/>
</wmb:bitstreamData>
</wmb:event>
|
清单 6. FlowEnd 的事件消息
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0/monitoring/event">
<wmb:eventPointData>
<wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3"
wmb:eventSourceAddress="QIN.transaction.End">
<wmb:eventIdentity wmb:eventName="FlowEnd"/>
<wmb:eventSequence wmb:creationTime="2009-10-08T02:16:15.237"/>
<wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454"
wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d"
wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
<wmb:eventData/>
<wmb:messageFlowData>
<wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
<wmb:executionGroup wmb:name="default"
wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
<wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF"
wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0"
wmb:threadId="8152"/>
<wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>
<wmb:messageFlowData/>
</wmb:eventPointData>
<wmb:applicationData>
<wmb:simpleContent wmb:name="MsgId"
wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112"
wmb:dataType="hexBinary"/>
</wmb:applicationData>
</wmb:event>
|
清单 7. In_C2F 的事件消息
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0/monitoring/event">
<wmb:eventPointData>
<wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3"
wmb:eventSourceAddress="HTTP_Request_C2F.terminal.in">
<wmb:eventIdentity wmb:eventName="In_C2F"/>
<wmb:eventSequence wmb:creationTime="2009-10-08T02:16:14.609"/>
<wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454"
wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d"
wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
<wmb:eventData/>
<wmb:messageFlowData>
<wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
<wmb:executionGroup wmb:name="default"
wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
<wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF"
wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0"
wmb:threadId="10024"/>
<wmb:node wmb:nodeLabel="HTTP_Request_C2F" wmb:nodeType="ComIbmWSRequestNode"
wmb:terminal="in"/>
<wmb:messageFlowData/>
<wmb:applicationData>
<wmb:simpleContent wmb:name="MsgId"
wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112"
wmb:dataType="hexBinary"/>
</wmb:applicationData>
</wmb:eventPointData>
</wmb:event>
|
清单 8. Out_C2F 的事件消息
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0/monitoring/event">
<wmb:eventPointData>
<wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3"
wmb:eventSourceAddress="HTTP_Request_C2F.terminal.out">
<wmb:eventIdentity wmb:eventName="Out_C2F"/>
<wmb:eventSequence wmb:creationTime="2009-10-08T02:16:15.235"/>
<wmb:eventCorrelation wmb:localTransactionId="ae3f4f63-1ad6-45e7-b84d-0fc9f2f35454"
wmb:parentTransactionId="6bf33d39-0e92-4a7f-872e-96c01ea6c65d"
wmb:globalTransactionId="4fabdaba-0964-4b94-93f2-14cd5f4a62b8"/>
<wmb:eventData/>
<wmb:messageFlowData>
<wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
<wmb:executionGroup wmb:name="default"
wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
<wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF"
wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0"
wmb:threadId="5864"/>
<wmb:node wmb:nodeLabel="HTTP_Request_C2F" wmb:nodeType="ComIbmWSRequestNode"
wmb:terminal="out"/>
<wmb:messageFlowData/>
<wmb:applicationData>
<wmb:simpleContent wmb:name="MsgId"
wmb:value="414d5120574d42514d20202020202020be56ca4a202fe112"
wmb:dataType="hexBinary"/>
</wmb:applicationData>
</wmb:eventPointData>
</wmb:event>
|
将从 Fahrenheit 到 Celsius 的温度换算的测试消息发送给输入队列 QIN。事务将生成 FlowStart 和 FlowEnd 两个事务事件以及 In_F2C 和 Out_F2C 两个终端事件,该事务将在订阅队列 QEVENT 中生成四条消息。
向流的输入队列 QIN 发送无效测试消息,以便生成一个异常,让事务无法成功运行。只生成事务事件 FlowStart、FlowRollback 和 FlowEnd,而 QEVENT 队列也只接收到三条相应的 XML 消息。由于异常是在 HTTPRequest 之前的 Compute 节点 Build_HTTP_Request_Msgare 中抛出的,因此并未调用终端事件。事件并未参与到事务中 —— 换句话说,如果消息流中发生了事务回滚,则生成的事件不会回滚,且仍然保留为发布状态。这正是 QEVENT 队列接收到事务事件 FlowStart 和 FlowEnd 的原因。FlowRollback 的事件消息如清单 9 所示:
清单 9. FlowRollback 的事件消息
<wmb:event xmlns:wmb="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0/monitoring/event">
<wmb:eventPointData>
<wmb:eventData wmb:productVersion="6103" wmb:eventSchemaVersion="6.1.0.3"
wmb:eventSourceAddress="QIN.transaction.Rollback">
<wmb:eventIdentity wmb:eventName="FlowRollback"/>
<wmb:eventSequence wmb:creationTime="2009-10-08T02:57:16.653"/>
<wmb:eventCorrelation wmb:localTransactionId="45efc2e9-a166-43d8-8a27-f0c201f442b6"
wmb:parentTransactionId="e5095bf9-ae05-4ca2-89b6-547b9bd9d0e8"
wmb:globalTransactionId="ab206c81-13a3-499e-9fa3-87ac236c3c96"/>
</wmb:eventData>
<wmb:messageFlowData>
<wmb:broker wmb:name="BRK1" wmb:UUID="2d750f67-2301-0000-0080-96dbba41cd3f"/>
<wmb:executionGroup wmb:name="default"
wmb:UUID="12feee26-2401-0000-0080-9bc38c4d3910"/>
<wmb:messageFlow wmb:uniqueFlowName="BRK1.default.MonitoringEvents_MF"
wmb:name="MonitoringEvents_MF" wmb:UUID="8c284827-2401-0000-0080-c826dabb2ad0"
wmb:threadId="24096"/>
<wmb:node wmb:nodeLabel="QIN" wmb:nodeType="ComIbmMQInputNode" wmb:detail="QIN"/>
</wmb:messageFlowData>
</wmb:eventPointData>
<wmb:applicationData>
<wmb:simpleContent wmb:name="MsgId"
wmb:value="414d5120574d42514d20202020202020be56ca4a2039df0b"
wmb:dataType="hexBinary"/>
</wmb:applicationData>
</wmb:event>
|
还可以使用输入消息 C2F.xml 或 F2C.xml 在流调用 Web 服务时生成回滚事件,而且托管 Message Broker 服务器的机器不需要具备 Internet 连接。
当不需要事件时,可以动态禁用所配置的事件,而不需要重新部署消息流。举例来说,要禁用所有终端事件,可以运行以下命令:
mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -s "HTTP_Request_C2F.terminal.in,HTTP_Request_C2F.terminal.out,HTTP_Request_F2C.terminal.in, HTTP_Request_F2C.terminal.out" -i disable |
在命令中使用事件源地址在节点级禁用各事件,假定已经为消息流激活了监控功能。当然,您还可以为消息流禁用监控,从而防止消息流生成任何事件。
如果需要更改消息流中各事件的启用状态或有效负荷数据,可以使用 Message Flow 编辑器中的监控属性来配置它们。在本例中,您需要重新部署流以便覆盖事件属性的设置。
您还可以使用监控配置文件来配置事件源。这样做的优势在于可以在运行时动态配置事件源及其相关属性,而不需要重新部署流。监控配置文件是一个符合 XML 模式文件 MonitoringProfile.xsd 的 XML 文档,用于指定将生成事件的消息流中的事件源和相关属性。使用以下命令为消息流创建配置了以下属性的监控配置 XML 文件。此监控配置文件可用作创建新监控配置文件的起始点。输出文件 MyEventMonitoringProfile.xml 如上面的清单 8 所示。
mqsireportflowmonitoring BRK1 -e default -f MonitoringEvents_MF -x -p C:/MyEventMonitoringProfile.xml |
清单 10. MyEventMonitoringProfile.xm 的监控配置文件
<profile:monitoringProfile xmlns:profile="http://www.ibm.com/xmlns/prod/websphere/
messagebroker/6.1.0.3/monitoring/profile" profile:version="2.0">
<profile:eventSource profile:eventSourceAddress="QIN.transaction.start"
profile:enabled="true">
<profile:eventPointDataQuery>
<profile:eventIdentity>
<profile:eventName profile:literal="FlowStart"/>
</profile:eventIdentity>
<profile:eventCorrelation>
<profile:localTransactionId profile:sourceOfId="automatic"/>
<profile:parentTransactionId profile:sourceOfId="automatic"/>
<profile:globalTransactionId profile:sourceOfId="automatic"/>
</profile:eventCorrelation>
<profile:eventSequence profile:name="creationTime"/>
</profile:eventPointDataQuery>
<profile:applicationDataQuery>
<profile:complexContent>
<profile:payloadQuery profile:queryText="$Root/MQMD/MsgId"/>
</profile:complexContent>
<profile:complexContent>
<profile:payloadQuery profile:queryText="$Body/TemperatureConversion"/>
</profile:complexContent>
</profile:applicationDataQuery>
<profile:bitstreamDataQuery profile:bitstreamContent="all"
profile:encoding="base64Binary"/>
<profile:eventSource>
<profile:eventSource profile:eventSourceAddress="QIN.transaction.end"
profile:enabled="true">
......
</profile:eventSource>
<profile:eventSource profile:eventSourceAddress="QIN.transaction.rollback"
profile:enabled="true">
......
</profile:eventSource>
<profile:eventSource profile:eventSourceAddress="HTTP_Request_C2F.terminal.in"
profile:enabled="true">
<profile:eventPointDataQuery>
<profile:eventIdentity>
<profile:eventName profile:literal="In_C2F"/>
</profile:eventIdentity>
<profile:eventCorrelation>
<profile:localTransactionId profile:sourceOfId="automatic"/>
<profile:parentTransactionId profile:sourceOfId="automatic"/>
<profile:globalTransactionId profile:sourceOfId="automatic"/>
</profile:eventCorrelation>
<profile:eventSequence profile:name="creationTime"/>
</profile:eventPointDataQuery>
<profile:applicationDataQuery>
<profile:complexContent>
<profile:payloadQuery profile:queryText="$Root/MQMD/MsgId"/>
</profile:complexContent>
</profile:applicationDataQuery>
<profile:bitstreamDataQuery profile:bitstreamContent="none"
profile:encoding="none"/>
</profile:eventSource>
<profile:eventSource profile:eventSourceAddress="HTTP_Request_C2F.terminal.out"
profile:enabled="true">
......
</profile:eventSource>
<profile:eventSource profile:eventSourceAddress="HTTP_Request_F2C.terminal.in"
profile:enabled="true">
......
</profile:eventSource>
<profile:eventSource profile:eventSourceAddress="HTTP_Request_F2C.terminal.out"
profile:enabled="true">
......
</profile:eventSource>
</profile:monitoringProfile>
|
重新创建新监控配置文件或者在已有基础上修改都相当简单。监控配置文件必须为可以发出事件的消息流定义事件源,以及各事件的属性。换句话说,监控配置文件仅适用于具备可添加相应事件的节点和终端的消息流。举例来说,对于 eventSourceAddress QIN.transaction.start,消息流必须有一个名称为 QIN 的输入节点。
您可以使用 Broker Archive Editor 来应用监控配置文件:
- 打开 Message Broker Toolkit 中的 Broker Application Development 透视图。
- 使用 Broker Archive Editor 打开一个 BAR 文件。
- 单击 Manage 选项卡。
- 单击希望设置监控配置文件可配置服务的消息流。
- 在 Monitoring Profile Name 字段中输入监控配置文件的名称。
图 13. 使用 BAR 文件应用监控配置文件

- Save and deploy the BAR file.
您还可以使用以下命令应用监控配置文件
- 创建一个可配置服务:
mqsicreateconfigurableservice BRK1 -c MonitoringProfiles -o MyMonitoringEventProfile
- 关联监控配置文件与可配置服务:
mqsichangeproperties BRK1 -c MonitoringProfiles -o MyMonitoringEventProfile -n profileProperties -p C:/MyEventMonitoringProfile.xml
- 将监控配置文件可配置服务应用于一个消息流。举例来说,应用于执行分组 default 上的 MonitoringEvents_MF 流:
mqsichangeflowmonitoring BRK1 -e default -f MonitoringEvents_MF -m MyMonitoringEventProfile
订阅后的监控事件消息可以被其他应用程序用于
- 生成 PKI 数据
- 提供统计和结算报告
- 捕获任何回滚事务
- 存储用于审计的有效负荷
举例来说,可以根据特定时间时隔生成的 FlowEnd 事件的总数来计算成功经过消息流的事务的数量。可以根据 In_C2F 和 Out_C2F 事件的 creationTime 差值来计算温度换算 Web 服务请求调用完成所用的时间。要了解关于如何分析监控事件消息中的数据的更多信息,请参见 Message Broker Samples Gallery 中的示例,它展示了如何通过 WebSphere Business Monitor 来监控这类事件。
如上所述,您可以使用监控事件来生成关于事务属性和统计报告的有用数据。Message Broker 还提供了其他工具,比如说代理级的统计和 pub/sub 报告,以及消息流级的统计和核算报告,用于捕捉运行时信息。
您可以生成 XML 格式的 代理统计报告,提供关于代理网络的性能以及代理和与之相连的客户机之间的吞吐量的信息。举例来说,要在代理 BRK1 的默认执行分组上以每分钟为间隔启用代理统计报告,可以在 Message Broker Command Console 上运行以下命令。更改将立即生效 —— 您不需要重新启动代理:
mqsichangeproperties BRK1 -e default -o DynamicSubscriptionEngine -n statsInterval -v 60000 |
要禁用报告,可以使用相同命令,但需要将 statsInterval 属性设置为 0。启用后,代理每分钟将发布一次如清单 11 所示的统计报告。统计报告将通过以下主题发布给所有订阅者:
$SYS/Broker/<broker name>/ExecutionGroup/<execution group>/Statistics |
In this case:
$SYS/Broker/BRK1/ExecutionGroup/default/Statistics |
清单 11. 代理统计报告的示例
<Broker uuid="2d750f67-2301-0000-0080-96dbba41cd3f" label="BRK1" version="1">
<ExecutionGroup uuid="12feee26-2401-0000-0080-9bc38c4d3910" label="default">
<DynamicSubscriptionEngine>
<ReportResponse>
<ExecutionGroupWideStatistics clientCount="0" neighbourCount="0"
subscriptionCount="9" timeStamp="2009-10-05 09:18:53"/>
<ClientStatistics bytesQueued="0" msgsSent="0" bytesSent="0" bytesCutThru="0"
msgsReceived="0" bytesReceived="0" msgsDropped="0" bytesDropped="0"
disconnectMsgsDropped="0" disconnectBytesDropped="0"/>
<NeighbourStatistics bytesQueued="0" msgsSent="0" bytesSent="0" bytesCutThru="0"
msgsReceived="0" bytesReceived="0" msgsDropped="0" bytesDropped="0"
disconnectMsgsDropped="0" disconnectBytesDropped="0"/>
</ReportResponse>
<DynamicSubscriptionEngine>
</ExecutionGroup>
</Broker>
|
消息流核算和统计报告包含关于消息流运行时行为的动态信息,并且代理可以收集这些信息以便记录消息流的执行性能和运作详情,包括处理的消息数量、消息的大小、处理器利用率以及占用的处理时间。有关更多信息,请参见 Message Broker 信息中心的 消息流核算和统计数据。
可以在消息流或执行分组的级别上收集核算和统计数据(屏幕快照、存档或同时使用两者)。如果需要,您还可以收集线程和节点级统计数据。发起以下命令,针对 MonitoringEvents_MF 流上的 XML 格式的发布消息生成屏幕快照数据:
mqsichangeflowstats BRK1 -s -e default -f MonitoringEvents_MF -c active -o xml |
报告可以被放到主题中:
$SYS/Broker/BRK1/StatisticsAccounting/SnapShot/default/MonitoringEvents_MF |
清单 12. 流统计数据报告的示例
<WMQIStatisticsAccounting RecordType="SnapShot" RecordCode="SnapShot"> <MessageFlow BrokerLabel="BRK1" BrokerUUID="2d750f67-2301-0000-0080-96dbba41cd3f" ExecutionGroupName="default" ExecutionGroupUUID="12feee26-2401-0000-0080-9bc38c4d3910" MessageFlowName="MonitoringEvents_MF" StartDate="2009-10-14" StartTime="23:58:57.288" EndDate="2009-10-14" EndTime="23:59:16.706" TotalElapsedTime="18127000" MaximumElapsedTime="1168000" MinimumElapsedTime="552000" TotalCPUTime="46875" MaximumCPUTime="15625" MinimumCPUTime="15625" CPUTimeWaitingForInputMessage="0" ElapsedTimeWaitingForInputMessage="1288000" TotalInputMessages="28" TotalSizeOfInputMessages="18452" MaximumSizeOfInputMessages="659" MinimumSizeOfInputMessages="659" NumberOfThreadsInPool="1" TimesMaximumNumberOfThreadsReached="28" TotalNumberOfMQErrors="0" TotalNumberOfMessagesWithErrors="0" TotalNumberOfErrorsProcessingMessages="0" TotalNumberOfTimeOutsWaitingForRepliesToAggregateMessages="0" TotalNumberOfCommits="28" TotalNumberOfBackouts="0" AccountingOrigin="Anonymous"/> <Threads Number="0"/> <Nodes Number="0"/> </WMQIStatisticsAccounting> |
本文向您展示了如何在 WebSphere Message Broker V6.1 或更新版本中轻松地配置内置监控事件,以 XML 格式发布事件消息。事件文档可以被订阅到预定义的主题,并由其他应用程序,比如 WebSphere Business Monitor,用于监控流事务数据、存储审计数据、跟踪消息流使用情况、报告指标以及提供性能 KIP。本文还展示了如何在运行时随需应变地更新监控事件配置。最后,本文讨论了代理统计数据、消息流统计数据和核算报告,您可以将它们与监控事件结合使用。
作者要感谢来自 IBM Software Services for WebSphere (ISSW) 团队的 Neal Mulvenna,以及来自 IBM Global Business Services (GBS) 团队的 Sudhakar Bodapati 为完善本文所做出的审校工作。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 项目交换文件 | MonitoringEvents_PI.zip | 10 KB | HTTP |
学习
- WebSphere Message Broker V6.1 中的新特性
介绍 WebSphere Message Broker V6.1 中的主要增强,并讨论该产品与架构师、消息流设计人员和开发人员有关的技术内容。 - IBM Redpaper:使用 WebSphere Message Broker V6.1 中的新特性
本红皮书介绍 WebSphere Message Broker V6.1 中的新特性,并展示如何使用它们增强您的消息传递解决方案。 - WebSphere Message Broker 开发人员资源页面
其中的技术资源将帮助您使用 WebSphere Message Broker,通过连接性、通用数据转换,以及各种服务、应用程序和平台的企业级集成来增强您的 SOA。 - 红皮书:模式:使用 WebSphere Message Broker 和 WebSphere ESB 的 SOA 设计
这些针对电子商业的模式是久经考验的可重用资源,可用于加快开发和部署电子商务应用程序的速度。本红皮书将展示如何使用 WebSphere ESB 与 WebSphere Message Broker 在 SOA 中实现 ESB。包括演示设计、开发和部署的场景。 - developerWorks WebSphere 开发人员资源
针对使用 WebSphere 产品的开发人员的技术信息和资源。developerWorks WebSphere 提供了产品下载、how-to 信息、支持资源以及一个包括 2000 多份技术文章、教程、最佳实践、IBM 红皮书和在线产品手册的免费技术库。 - developerWorks WebSphere 应用程序连接性开发人员资源
帮助您构建 WebSphere 应用程序连接性和业务集成解决方案的 How-to 文章、下载、教程、培训、产品信息和其他资源。 - developerWorks WebSphere 业务流程管理开发人员资源
帮助您建模、装配、部署和管理业务流程的 WebSphere BPM how-to 文章、下载、教程、培训、产品信息和其他资源。 - developerWorks WebSphere SOA 和 Web 服务开发人员资源
帮助您设计和构建 WebSphere SOA 和 Web 服务解决方案的 how-to 文章、下载、教程、培训、产品信息和其他资源。 - WebSphere 随需应变演示
下载、观看和学习哪些 WebSphere 产品和 WebSphere 相关技术可以为您的企业所用。 - developerWorks 网络广播
IBM 专家组织的免费技术会议,可以加速您的学习进度,并帮助您克服软件项目中的大多数难题。会议包括时长 1 小时的网络广播,以及在世界各个城市举办的半天和全天的实时会议。 - IBM Press 出版的关于 WebSphere 的书籍
通过 Barnes & Noble 可以方便地订购它们。
获得产品和技术
- 下载 WebSphere Message Broker V6.1 的免费试用版
V6.1 是针对异构 IT 环境中的通用连接和转换而构建的 ESB 版本。 - WebSphere Message Broker 产品页面
产品描述、产品新闻、培训信息和支持信息等。 - WebSphere Message Broker 信息中心
托管所有 WebSphere Message Broker V6 文档的 Web 门户,包括关于如何安装、配置和使用 WebSphere Message Broker 环境的概念、任务和参考信息。 - WebSphere Message Broker 文档库
WebSphere Message Broker 规范和手册。 - 大多数热门的 WebSphere 试用下载
针对重要 WebSphere 产品的免费试用下载。
讨论
- WebSphere Message Broker 论坛
获取关于技术问题的解答,并与其他 WebSphere Message Broker 用户共享您的专业知识。 - WebSphere Message Broker 支持页面
关于支持问题及其解决方案的可搜索数据库,包括下载、补丁、问题跟踪等。 - WebSphere 论坛
产品相关论坛,您可以获取关于技术问题的解答并与其他 WebSphere 用户共享专业知识。 - developerWorks 博客
加入与 developerWorks 用户和作者以及 IBM 编辑和开发人员的会话。 - developerWorks 播客
收听针对软件革新者的有趣访谈。 - WebSphere 相关活动
会议、内部预映、网络广播和世界各地与 WebSphere 开发人员相关的其他活动。