Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » QAnywhere » 服务器管理请求 » 使用服务器管理请求管理连接器

 

监控连接器

要获取关于连接器的信息,请编写一种称为客户端状态请求的特殊服务器管理请求。它包含一个 <ClientStatusRequest> 标记,该标记使用一个或多个 <request> 标记,而 <request> 标记包含注册请求必需的信息。

您的客户端状态请求可以通过以下几种方式获得有关连接器的报告:

  • 进行一次性请求。

  • 注册状态更改监听器以在连接器的状态发生变化时发送报告。

  • 注册错误监听器以在连接器出错时发送报告。

此外,可以将报告安排为在特定时间或以特定时间间隔发送。

ClientStatusRequest 标记

要获得有关连接器的信息,请使用 <ClientStatusRequest>。

客户端状态请求由一个或多个 <request> 标记组成,<request> 标记包含注册该请求的所有必需信息。

<ClientStatusRequest> 子标记 说明
<request> 请求中的分组信息。
客户端状态请求的 request 标记

在 <request> 标记中,使用可选的 <replyAddr> 标记为作为该请求的结果而生成的每个报告指定返回地址。如果省略此标记,则报告的缺省返回地址为源消息的回复地址。

使用可选的 <requestId> 为包括在每个报告中的请求添加一个标签。注册多个请求时,或者删除或修改请求时,使用此 ID 可以区分哪些报告是从特定请求生成的。

要为请求指定连接器列表,请包括一个或多个 <client> 标记,每个标记带有一个连接器地址。如果是一次性请求,所有连接器都包括在报告中。如果是事件监听器请求,则服务器会对这些连接器中的每个连接器进行监听。

要指定事件详细信息应在任何服务器停机期间都持久保留,请指定 <persistent> 标记。此标记不需要任何数据,其形式可以为 <persistent/> 或 <persistent></persistent>。

通过包括一个或多个 <onEvent> 标记(每个标记具有一个事件类型),可以选择指定事件列表。如果省略这些标记,则客户端状态请求会生成一次性请求。否则,客户端状态请求为指定事件注册事件监听器。

客户端状态请求的 <request> 子标记 说明
<client> 可以包括一个或多个 <client> 标记,每个标记具有一个连接器地址。如果是一次性请求,所有列出的连接器都包括在报告中。如果是事件监听器请求,则服务器开始监听这些连接器中的各个连接器。
<onEvent> 指定发生时服务器应生成报告的事件。可以包括一个或多个 <onEvent> 标记,每个标记具有一个事件类型。如果省略这些标记,则客户端状态请求会生成一次性请求。否则,使用客户端状态请求为指定的事件注册事件监听器。
<persistent> 指定此客户端状态请求中的详细信息应在服务器数据库中持久保留。
<replyAddr> 为作为该请求的结果而生成的每个报告指定返回地址。如果省略此标记,则报告的缺省返回地址为源消息的回复地址。
<requestId> 报告的标签。该值用作请求的标签,并包括在作为该请求的结果而生成的每个报告中。这样做可以在已注册多个请求并要删除或修改未完成的请求时,区分哪些报告是从特定请求生成的。
<schedule> 请参见服务器管理请求父标记
一次性客户端状态请求

通过省略客户端状态请求的 <onEvent> 和 <schedule> 标记可以创建一次性请求。在这种情况下,生成单个报告,其中包含在客户端状态请求中指定的每个连接器的当前状态信息。

以下 XML 消息省略了 <onEvent> 和 <schedule> 标记,一次性请求示例也同样省略了这些标记。它生成单个报告,其中包含在 <ClientStatusRequest> 标记中指定的每个连接器的当前状态信息。

<?xml version="1.0" encoding="UTF-8"?>
<actions>
 <ClientStatusRequest>
  <request>
   <replyAddr>ianywhere.connector.beajms\q11</replyAddr>
   <requestId>myOneTimeRequest</requestId>
   <client>ianywhere.server</client>
   <client>ianywhere.connector.beajms</client>
  </request>
 </ClientStatusRequest>
</actions>
事件发生时的客户端状态请求

要指定希望 QAnywhere 服务器为其生成状态报告的事件,请在您的客户端状态请求中包括一个或多个 <onEvent> 标记。与一次性请求不同,服务器不会立即对请求做出响应,而是开始监听要发生的事件。每次触发这些事件中的一个事件时,都发送一个报告,其中包含有关引发该事件的连接器的信息。

事件发生时的请求支持以下事件:

事件 发生时间
open 已关闭的连接器打开。
close 先前打开或暂停的连接器关闭。
statusChange 连接器的状态从一种状态变为另一种状态。可能的状态为打开和关闭。
error 连接器抛出意外错误。
fatalError 连接器抛出未处理的致命错误。
none 这永远不会发生。这会从连接器有效地删除所有以前的事件监视项目。

在以下示例中,每次服务器连接器更改其状态或生成错误时,都向地址为 ianywhere.connector.beajms\q11 的连接器发送一个状态报告。

<?xml version="1.0" encoding="UTF-8"?>
<actions>
 <ClientStatusRequest>
  <request>
   <replyAddr>ianywhere.connector.beajms\q11</replyAddr>
   <requestId>myEventRequest</requestId>
   <client>ianywhere.server</client>
   <onEvent>statusChange</onEvent>
   <onEvent>error</onEvent>
  </request>
 </ClientStatusRequest>
</actions>
多个同时请求

对于任意数量的连接器(包括服务器连接器),每个返回地址都可以有其自己的一组事件监听器。将事件监听器添加到连接器不会干扰服务器中的任何其它事件监听器(除了可能要替换的监听器)。

请求替换

如果将事件监听器添加到连接器,而该连接器已有使用同一返回地址注册的事件监听器,则会用新监听器替换旧监听器。例如,如果连接器 abc 的 statusChange 监听器注册到地址 x/y,而您又将 abc 的 error 监听器注册到地址 x/y,则 abc 将不再对 statusChange 事件做出响应。

要将多个事件注册到同一地址,必须使用多个 <onEvent> 标记创建单个请求。

删除请求

如果连接器的一个事件监听器注册到某个地址,则您可以通过提供来自同一地址并且指定了 "none" 事件的另一个客户端状态请求来删除该事件监听器。

在以下示例中,注册到地址 ianywhere.connector.beajms\q11 的服务器连接器的所有事件监听器都被删除:

<?xml version="1.0" encoding="UTF-8"?>
<actions>
 <ClientStatusRequest>
  <request>
   <replyAddr>ianywhere.connector.beajms\q11</replyAddr>
   <client>ianywhere.server</client>
   <onEvent>none</onEvent>
  </request>
 </ClientStatusRequest>
</actions>
持久客户端状态请求

要指定将请求的详细信息都保存到消息存储库的全局属性表中(服务器重新启动后它们可以在此处自动恢复),请在客户端状态请求中包括 <persistent> 标记。持久请求可以与调度事件和事件监听器一起使用,但一次性请求则不能与这两者一起使用。除了不能单独添加调度事件和事件监听器外,添加和删除持久请求的规则与常规请求的规则类似。而添加持久请求时,客户端必须在同一请求中为特定连接器/回复地址对指定所有事件监听器和调度。

以下示例将事件监听器和调度添加到 ianywhere.connector.myConnector 中,并使其持久保留。它还覆盖来自此连接器/回复地址对的任何以前的持久请求。每半小时会发送一次报告,连接器状态发生变化时也会发送报告。

<?xml version="1.0" encoding="UTF-8"?>
<actions>
 <ClientStatusRequest>
  <request>
   <replyAddr>ianywhere.connector.beajms\q11</replyAddr>
   <client>ianywhere.connector.myConnector</client>
   <onEvent>statusChange</onEvent>
   <schedule>
    <everyminute>30</everyminute>
   </schedule>
   <persistent/>
  </request>
 </ClientStatusRequest>
</actions>
事件监听器持久性

如果连接器关闭,则该连接器已注册到其地址的任何事件监听器都将在服务器中持续保留,直到服务器关闭。如果重新打开连接器,则存储的事件监听器会再次处于活动状态。

连接器状态

连接器可以处于以下两种状态中的一种:

  • 正在运行   连接器正在接受和处理进来的和外发的消息。此状态以连接器属性 ianywhere.connector.state=1 反映。

  • 未运行   连接器没有接受或处理进来的或外发的消息。此状态以连接器属性 ianywhere.connector.state=2 反映。连接器状态变为 "正在运行" 时,连接器会从头开始初始化。

有关如何更改连接器状态的信息,请参见修改连接器


客户端状态报告