Sun Java 徽标     上一页      目录      索引      下一页     

Sun 徽标
Sun Java System Message Queue 3 2005Q4 管理指南 

第 5 章
管理代理

本章介绍如何使用 imqcmd 实用程序来管理代理及其服务。本章包含以下各节:

本章并未涵盖与管理代理相关的全部主题。其他主题将在后面的各章中进行介绍:


前提条件

使用 imqcmdimqusermgr 命令行实用程序来管理代理。在管理代理前,必须执行以下操作:


使用 imqcmd 实用程序

imqcmd 实用程序用于管理代理及其服务。

有关 imqcmd 命令的语法、子命令和选项的参考信息,请参见第 13 章“命令行参考”。在单独的第 15 章“物理目标属性参考”中,介绍了管理物理目标时可使用的参考信息。

显示帮助

要显示有关 imqcmd 实用程序的帮助,请使用 -h-H 选项,而不要使用子命令。您无法获取有关特定子命令的帮助。

例如,以下命令显示有关 imqcmd 的帮助:

imqcmd -H

如果输入的命令行除了包含 -h-H 选项外,还包含子命令或其他选项外,则 imqcmd 实用程序只处理 -h-H 选项。命令行中的其他所有项均被忽略。

显示产品版本

要显示 Message Queue 产品版本,请使用 -v 选项。例如:

imqcmd -v

如果输入的命令行除了包含 -v 选项外,还包含子命令或其他选项,则 imqcmd 实用程序只处理 -v 选项。命令行中的其他所有项均被忽略。

指定用户名和密码

因为将对照用户系统信息库验证每个 imqcmd 子命令,所以每个 imqcmd 子命令都要求提供用户名和密码。唯一的例外是使用 -h 或 -H 选项来显示帮助的命令以及使用 -v 选项来显示产品版本的命令。

指定用户名

使用 -u 选项可指定管理用户名。如果省略了用户名,该命令会提示您输入它。例如,以下命令显示有关默认代理的信息:

imqcmd query bkr -u admin

为使本章中的示例便于阅读,我们将默认用户名 admin 显示为 -u 选项的参数。在生产环境中,应该使用自定义的用户名。

指定密码

使用以下方法之一指定密码:

在 Message Queue 的以前版本中,可以使用 -p 选项在 imqcmd 命令行中指定密码。不赞成使用此选项,在今后的版本中会将其删除。

指定代理名和端口

imqcmd 的默认代理是本地主机上运行的代理,默认端口是 7676

如果对在远程主机上运行的代理或监听非默认端口的代理执行命令,则必须使用 -b 选项指定代理的主机和端口。

示例

本节中的示例说明了 imqcmd 的用法。

第一个示例列出了在 localhost 端口 7676 上运行的代理的属性,因此不需要使用 -b 选项。该命令使用默认管理用户名 (admin) 并省略了密码,因此命令会提示您输入密码。

imqcmd query bkr -u admin

以下示例列出了在主机 myserver 端口 1564 上运行的代理的属性。用户名是 aladdin。(要使该命令起作用,需要更新用户系统信息库,将用户名 aladdin 添加到 admin 组中。)

imqcmd query bkr -b myserver:1564 -u aladdin

以下示例列出了在 localhost 端口 7676 上运行的代理的属性。命令的初始超时时间限制设置为 20 秒,超时后的重试次数设置为 7。用户密码在名为 myPassfile 的密码文件中,该文件位于调用命令时的当前目录中。

imqcmd query bkr -u admin -passfile myPassfile -rtm 20 -rtr 7

对于安全的代理连接,这些示例可能会包括 -secure 选项。-secure 选项使 imqcmd 使用 ssladmin 服务(如果已配置并启动了该服务)。


显示代理信息

要查询并显示某个代理的信息,请使用 query bkr 子命令。

下面是 query bkr 子命令的语法:

imqcmd query bkr -b hostName:portNumber

该子命令列出默认代理或指定主机和端口上的代理的当前属性设置。它还列出与指定代理连接且正在运行的代理(在多代理群集中)。

例如:

imqcmd query bkr -u admin

提示输入密码后,此命令将产生类似如下内容的输出:

版本

3.6

实例名

imqbroker

主端口

7676

                                                   

系统中当前的消息数

0

系统中当前的消息大小(字节)

0

停用消息队列中的当前消息数量

0

停用消息队列中的当前消息字节总数        

0

记录停用消息

true

截断停用消息队列中的消息主体

false

                                                   

系统中的最大消息数

无限制 (-1)

系统中的最大消息大小

无限制 (-1)

最大消息大小

70m

                                                   

自动创建队列

true

自动创建主题

true

自动创建队列的最大活动用户数

1

自动创建队列的最大备份用户数

0

                                                   

群集代理列表 (处于活动状态)                         

群集代理列表 (处于已配置状态)                     

群集主代理                                

群集 URL                                          

                                                   

日志等级

INFO

日志清空并重新记录间隔(秒)

604800

日志清空并重新记录大小(字节)

无限制 (-1)


更新代理属性

可以使用 update bkr 子命令更新以下代理属性:

下面是 update bkr 子命令的语法:

imqcmd update bkr [-b hostName:portNumb er]-o attribute=value [[-o attribute=value1]...]

该子命令更改默认代理或指定主机和端口上的代理的指定属性。例如,以下命令禁止自动创建队列目标:

imqcmd update bkr -o "imq.autocreate.queue=false" -u admin

这些属性在第 14 章“代理属性参考”中介绍。


暂停和恢复代理

启动代理后,可以使用 imqcmd 子命令控制代理的状态。

暂停代理

暂停代理时暂停的是代理的连接服务线程,从而使代理停止侦听连接端口。其结果是代理将无法再接受新连接、接收消息或分发消息。

但是,暂停代理不会暂停 admin 连接服务,因此您可以执行控制发送到代理的消息流所需的管理任务。暂停代理也不会暂停 cluster 连接服务。但是,群集中的消息传送依赖于群集中的不同代理所执行的传送功能。因此,暂停群集中的代理可能导致某些消息流的速度变慢。

下面是 pause bkr 子命令的语法:

imqcmd pause bkr [-b hostName:portNumber]

此命令暂停默认代理或指定主机和端口上的代理。

以下命令暂停在 myhost 端口 1588 上运行的代理。

imqcmd pause bkr -b myhost:1588 -u admin

也可以暂停单个连接服务和单个物理目标。有关更多信息,请参见暂停和恢复连接服务暂停和恢复物理目标

恢复代理

恢复代理将重新激活代理的服务线程,使代理恢复侦听端口。

下面是 resume bkr 子命令的语法:

imqcmd resume bkr [-b hostName:portNumber]

此子命令恢复默认代理或指定主机和端口上的代理。

以下命令将恢复在 localhost 端口 7676 上运行的代理。

imqcmd resume bkr -u admin


关闭并重新启动代理

关闭代理将正常终止代理进程。代理将停止接受新的连接和消息,并在完成现有消息的传送后终止代理进程。

下面是 shutdown bkr 子命令的语法:

imqcmd shutdown bkr [-b hostName:portNumber]

此子命令关闭默认代理或指定主机和端口上的代理。

以下命令将关闭在 ctrlsrv 端口 1572 上运行的代理:

imqcmd shutdown bkr -b ctrlsrv:1572 -u admin

使用 restart bkr 子命令可关闭并重新启动代理。下面是 restart bkr 子命令的语法:

imqcmd restart bkr [-b hostName:portNumber]

该子命令关闭并重新启动默认代理或指定主机和端口上的代理,重新启动时使用首次启动代理时指定的选项。要选择其他选项,请关闭代理,然后通过指定所需的选项来重新启动它。


显示代理度量

要显示有关代理的度量信息,请使用 metrics bkr 子命令。

下面是 metrics bkr 子命令的语法:

imqcmd metrics bkr [-b hostName:portNumber]
       [-m metricType] [-int interval] [-msp numSamples]

此子命令显示默认代理或指定主机和端口上的代理的代理度量。

可以使用 -m 选项来指定显示以下度量类型之一:

可以使用 -int 选项来指定显示度量的时间间隔(以秒为单位)。默认值为 5 秒。

可以使用 -msp 选项来指定在输出中显示的样例的数量。默认为无限制(无穷多)。

例如,要获得消息在 10 秒间隔内流入和流出代理的速率,请使用以下命令:

imqcmd metrics bkr -m rts -int 10 -u admin

此命令产生的输出如下:

--------------------------------------------------------

消息数/秒     消息字节/秒      数据包/秒     数据包字节/秒   

传入  传出    传入   传出     传入   传出    传入    传出  

--------------------------------------------------------

0     0      27      56      0     0      38      66   

10    0     7365     56      10    10    7457    1132  

0     0      27      56      0     0      38      73   

0     10     27     7402     10    20    1400    8459  

0     0      27      56      0     0      38      73   

有关代理收集和报告的数据的更详细描述,请参见代理范围内的度量


管理连接服务

imqcmd 实用程序包含可用于执行以下连接服务管理任务的子命令:

代理既支持来自应用程序客户端的连接,也支持来自管理客户端的连接。表 5-1 显示了 Message Queue 代理中当前可用的连接服务。如该表所示,每项服务都与它所使用的服务类型(对于应用程序客户端是 NORMAL,对于管理客户端是 ADMIN)和底层传输协议关联。

表 5-1 代理支持的连接服务 

服务名称

服务类型

协议类型

jms

NORMAL

tcp

ssljms (Enterprise Edition)

NORMAL

tls(基于 SSL 的安全性)

httpjms (Enterprise Edition)

NORMAL

http

httpsjms (Enterprise Edition)

NORMAL

https(基于 SSL 的安全性)

admin

ADMIN

tcp

ssladmin (Enterprise Edition)

ADMIN

tls(基于 SSL 的安全性)

您可以使用 imqcmd 子命令将连接服务作为一个整体进行管理,也可以管理某项特定的连接服务。如果子命令的目标是某项特定服务,请使用 -n 选项来指定表 5-1 的“服务名”列中列出的某个名称。

列出连接服务

要列出代理中可用的连接服务,请使用 list svc 子命令。

下面是 list svc 子命令的语法:

imqcmd list svc [-b hostName:portNumber]

此子命令列出默认代理或指定主机和端口上的代理中的所有连接服务。

以下命令列出在 localhost 端口 7676 上运行的代理中的所有服务:

imqcmd list svc -u admin

该命令将输出如下信息:

------------------------------------------------

服务名         端口号           服务状态

------------------------------------------------

admin         41844(动态)     正在运行

httpjms       -                未知

httpsjms      -                未知

jms           41843(动态)     正在运行

ssladmin      动态              未知

ssljms        动态              未知

显示连接服务信息

要查询并显示某项服务的信息,请使用 query 子命令。

下面是 query svc 子命令的语法:

imqcmd query svc -n serviceName [-b hostName:portNumber]

query svc 子命令显示有关在默认代理或指定主机和端口上的代理上运行的指定服务的信息。

例如:

imqcmd query svc -n jms -u admin

提示输入密码后,此命令将产生类似如下内容的输出:

服务名

jms

服务状态

正在运行

端口号

60920(动态)

                                     

当前已分配的线程数

0

当前的连接数

0

                                     

最小线程数

10

最大线程数

1000

更新连接服务属性

可以使用 update 子命令更改表 5-2 中列出的一个或多个服务属性的值。

表 5-2 imqcmd 更新的连接服务属性

属性

描述

port

为要更新的服务指定的端口(不适用于 httpjms 和 httpsjms)。值为 0 表示端口由端口映射器动态分配。

minThreads

至少应分配给服务的线程数。

maxThreads

最多可分配给服务的线程数。

下面是 update 子命令的语法:

imqcmd update svc -n serviceName [-b hostName:portNumber
         -o attribute=value [-o attribute=value1]...

该子命令更新在默认代理或指定主机和端口上的代理中运行的指定服务的指定属性。有关服务属性的说明,请参见连接属性

以下命令将至少应分配给 jms 服务的线程数更改为 20。

imqcmd update svc -n jms -o "minThreads=20" -u admin

显示连接服务度量

要显示有关某个服务的度量信息,请使用 metrics 子命令。

下面是 metrics 子命令的语法:

imqcmd metrics svc -n serviceName [-b hostName:portNumber] [-m metricType]
    [-int interval] [-msp numSamples]

此子命令显示默认代理或指定主机和端口上的代理中指定服务的度量。

使用 -m 选项指定要显示的度量类型:

可以使用 -int 选项来指定显示度量的时间间隔(以秒为单位)。默认值为 5 秒。

可以使用 -msp 选项来指定在输出中显示的样例的数量。默认为无限制(无穷多)。

例如,要获得 jms 连接服务处理的消息和包的累计总数,请使用以下命令:

imqcmd metrics svc -n jms -m ttl -u admin

提示输入密码后,此命令将产生类似如下内容的输出:

-------------------------------------------------

消息           消息字节        数据包        数据包字节   

传入  传出    传入    传出   传入   传出    传入    传出  

-------------------------------------------------

164   100   120704  73600  282   383   135967  102127

657   100   483552  73600  775   876   498815  149948

有关使用 imqcmd 来报告连接服务度量的详细说明,请参见连接服务度量

暂停和恢复连接服务

要暂停除管理服务之外的其他任何服务(不能暂停管理服务),请使用 pause svc resume svc 子命令。

下面是 pause svc 子命令的语法:

imqcmd pause svc -n serviceName [-b hostName:portNumber]

此子命令暂停在默认代理或指定主机和端口上的代理中运行的指定服务。例如,以下命令暂停在默认代理上运行的 httpjms 服务。

imqcmd pause svc -n httpjms -u admin

暂停服务有如下影响:

要恢复服务,请使用 resume svc 子命令。

下面是 resume svc 子命令的语法:

imqcmd resume svc -n serviceName[-b hostName:portNumber]

此子命令恢复在默认代理或指定主机和端口上的代理中运行的指定服务。


获取有关连接的信息

imqcmd 实用程序包含可用来列出并获取连接信息的子命令。

list cxn 子命令列出指定服务名的全部连接。下面是 list cxn 子命令的语法:

imqcmd list cxn [-svn serviceName] [-b hostName:portNumber]

此子命令列出默认代理或指定主机和端口上的代理中指定服务名的所有连接。如果未指定服务名,将列出所有连接。

例如,以下命令列出默认代理上的所有连接:

imqcmd list cxn -u admin

提示输入密码后,此命令将产生类似如下内容的输出:

正在列出指定的代理上的所有连接:

-----------------------------------

主机                   主端口

------------------------------------

localhost              7676

---------------------------------------------------------------------------

连接 ID                用户    服务      生成方      使用方          主机

---------------------------------------------------------------------------

1964412264455443200   guest   jms       0          1            127.0.0.1

1964412264493829311   admin   admin     1          1            127.0.0.1

成功列出连接。

要查询并显示某项连接服务的信息,请使用 query 子命令。

query cxn -n connectionID [-b hostName:portNumber]

此子命令显示默认代理或指定主机和端口上的代理中的指定连接的信息。

例如:

imqcmd query cxn -n 421085509902214374 -u admin

提示输入密码后,此命令将产生类似如下内容的输出:

连接 ID

421085509902214374

用户

guest

服务

jms

生成方

0

使用方

1

主机

111.22.333.444

端口

60953

客户端 ID          

客户端平台    


管理长期订阅

使用 imqcmd 子命令可以通过执行下面一项或多项操作来管理代理的长期订阅:

长期订阅是指客户端注册为长期项的主题订阅;长期订阅有唯一标识,它要求代理保留该订阅的消息,即使订阅使用方变为非活动状态也是如此。通常情况下,代理只能在消息已过期的情况下删除为长期订户保留的消息。

要列出指定物理目标的长期订阅,请使用 list dur 子命令。下面是 list dur 子命令的语法:

imqcmd list dur -d destName

例如,以下命令使用本地主机默认端口上的代理,列出 SPQuotes 主题的所有长期订阅:

imqcmd list dur -d SPQuotes

对于主题的每个长期订阅,list dur 子命令都返回长期订阅的名称、用户的客户端 ID、排队发往该主题的消息数量以及长期订阅的状态(活动/非活动)。例如:

名称          客户端 ID      消息数量       长期订户

                                           状态           

----------------------------------------------------------------

myDurable   myClientID       1            非活动

可以使用 list dur 子命令返回的信息标识您要销毁或要清除其消息的长期订阅。

purge dur 子命令清除带有指定客户端标识符的指定长期订阅的所有消息。下面是 purge dur 子命令的语法:

imqcmd purge dur -n subscrName -c clientID

destroy dur 子命令销毁带有指定客户端标识符的指定长期订阅。下面是 destroy dur 子命令的语法:

imqcmd destroy dur -n subscrName -c clientID

例如,以下命令销毁长期订阅 myDurable 和客户端 ID myClientID

imqcmd destroy dur -n myDurable -c myClientID


管理事务

客户端应用程序启动的所有事务都由代理来跟踪。这些事务可以是简单 Message Queue 事务,也可以是分布式事务(XA 资源)管理器管理的分布式事务。

每个事务都有一个 Message Queue 事务 ID,这是一个 64 位数字,用于唯一标识代理上的事务。分布式事务也有一个分布式事务 ID (XID),长度可达 128 字节,由分布式事务管理器指定。Message Queue 负责维护 Message Queue 事务 ID 与 XID 之间的关联。

对于分布式事务而言,当失败时,事务可能停留在 PREPARED 状态,而不会提交。因此,作为管理员,您需要监视事务的状态,并回滚或提交那些停留在 PREPARED 状态的事务。

要列出代理跟踪的所有事务,请使用 list txn 命令。下面是 list tx 子命令的语法:

imqcmd list txn

例如,以下命令列出某个代理中的所有事务。

imqcmd list txn

对于每个事务,list 子命令将返回事务 ID、状态、用户名、消息数或确认数以及创建时间。例如:

---------------------------------------------------------------

事务 ID          状态      用户名      # Msgs/    创建时间

                                     # Acks

---------------------------------------------------------------

64248349708800  PREPARED  guest      4/0        1/30/02 10:08:31 AM

64248371287808  PREPARED  guest      0/4        1/30/02 10:09:55 AM

该命令显示了代理中的所有事务,包括本地事务和分布式事务。只能提交或回滚处于 PREPARED 状态的事务。只有当您知道该事务由于失败而停留在 PREPARED 状态,而且分布式事务管理器当前没有提交该事务时才可以这样做。

例如,如果代理的 auto-rollback 属性设置为 false(请参见表 14-2),则必须在代理启动时手动提交或回滚处于 PREPARED 状态的事务。

list 子命令还分别显示事务中生成和确认的消息数 (#Msgs/#Acks)。提交事务之前不会传送这些消息,也不会处理确认。

query 子命令可以显示上述信息以及其他许多值:客户端 ID、连接标识和分布式事务 ID (XID)。下面是 query txn 子命令的语法:

imqcmd query txn -n transactionID

例如,以下示例生成如下所示的输出:

imqcmd query txn -n 64248349708800

客户端 ID        

连接

guest@192.18.116.219:62209->jms:62195

创建时间

1/30/02 10:08:31 AM

确认数

0

消息数

4

状态

PREPARED

事务 ID

64248349708800

用户名

guest

XID

6469706F6C7369646577696E6465723130313234313431313030373230

使用 commitrollback 子命令可以提交和回滚分布式事务。正如前文所述,只能提交和回滚处于 PREPARED 状态的事务。

下面是 commit 子命令的语法:

imqcmd commit txn -n transactionID

例如:

imqcmd commit txn -n 64248349708800

下面是 rollback 子命令的语法:

imqcmd rollback txn -n transactionID

有关更多信息,请参见表 14-2 中的 imq.transaction.autorollback 属性。

也可以配置代理,使它在启动时自动回滚处于 PREPARED 状态的事务。



上一页      目录      索引      下一页     


文件号码: 819-3561。  版权所有 © 2005 Sun Microsystems, Inc. 保留所有权利。