Sun ONE logo     上一个      目录      索引      下一个     
Sun ONE Message Queue, Version 3.0.1 管理员指南



第 6 章   代理和应用程序管理

本章介绍如何执行与管理代理及其提供的服务相关的任务。某些任务并不是针对特定的客户机应用程序。这些任务包括:

  • 控制代理的状态:可以暂停、恢复、关闭和重新启动代理。
  • 查询和更新代理属性
  • 查询和更新连接服务
  • 分配和管理资源
  • 管理连接服务

其它代理任务是在特定应用程序上执行的,包括管理物理目标、长期订阅和事务等任务:

  • MQ 消息通过代理目标路由到接收者或订户。您负责在代理上创建这些目标。
  • MQ 负责为长期订户分配并维护资源,即使这些客户机的长期订阅处于非活动状态。使用 MQ 命令工具可以获得长期订阅的相关信息,也可以销毁长期订阅或清理其中的消息以节约 MQ 资源。
  • MQ 事务和分布式事务由代理来跟踪。如果出现错误,可能需要手动提交或回滚事务。

本章介绍如何使用命令行实用程序 (imqcmd) 来执行这些任务。许多任务还可以使用管理控制台(MQ 消息服务器的图形界面)来完成。有关详细信息,请参阅第 4 章“管理控制台教程”

命令行实用程序

命令行实用程序可用于管理代理及其提供的服务。本节介绍了基本的 imqcmd 命令语法,提供了一个子命令列表,并概述了 imqcmd 的选项。后续各节将介绍如何使用这些命令完成特定的任务。

命令语法

imqcmd 命令的一般语法如下:

imqcmd subcommand argument [options]
imqcmd -h|H
imqcmd -v

请注意,如果指定 -v、-h 或 -H 选项,将不会执行命令行中指定的子命令。例如,输入以下命令将显示版本信息,而不是执行 restart 子命令。

imqcmd restart bkr -v

imqcmd 子命令

表 6-1 列出了命令行实用程序 (imqcmd) 包含的子命令:

表 6-1    imqcmd 子命令 

子命令和变量

说明

create dst
 

创建目标。

 
commit txn
 

提交事务。

 
destroy dst
 

销毁目标。

 
destroy dur
 

销毁长期订阅。

 
list dst
 

列出代理中的目标。

 
list dur
 

列出主题下的长期订阅。

 
list svc
 

列出代理中的服务。

 
list txn
 

列出代理中的事务。

 
metrics bkr
 

显示代理标准。

 
metrics svc
 

显示服务标准。

 
pause bkr
 

暂停代理中的所有服务。

 
pause svc
 

暂停某项服务。

 
purge dst
 

清理目标中的所有消息,但不销毁该目标。

 
purge dur
 

清理长期订阅中的所有消息,但不销毁该长期订阅。

 
query bkr
 

查询并显示代理中的信息。

 
query dst
 

查询并显示目标中的信息。

 
query svc
 

查询并显示服务中的信息。

 
query txn
 

查询并显示事务中的信息。

 
reload cls
 

重新装入代理群集配置。

 
restart bkr
 

重新启动当前正在运行的代理实例。不能用于启动新的代理实例。

 
resume bkr
 

恢复代理中的所有服务。

 
resume svc
 

恢复某项服务。

 
rollback txn
 

回滚某项事务。

 
shutdown bkr
 

关闭代理实例。关闭代理实例后可以使用 imqbrokerd 命令重新启动,但不能使用 imqcmdrestart bkr 子命令。

 
update bkr
 

更新某个代理的属性。

 
update dst
 

更新某个目标的属性。

 
update svc
 

更新某项服务的属性。

 

imqcmd 选项概述

表 6-2 列出了 imqcmd 命令的选项。有关如何使用它们的讨论,请参阅后面针对具体任务的各节。

表 6-2    imqcmd 选项 

选项

说明

-b hostName:port
 

指定代理的主机名和端口号。默认值为 localhost:7676

要仅指定端口,请使用:-b :7878
要仅指定主机名,请使用:-b 某台主机

 
-c clientID
 

指定订阅某个主题的长期订户的 ID。有关详细信息,请参阅管理长期订阅

 
-d topicName
 

指定主题的名称。与 list durdestroy dur 子命令一起使用。请参阅管理长期订阅

 
-f
 

执行操作,无需用户确认。

 
-h
 

显示使用帮助。不执行命令行上的命令。

 
-H
 

显示使用帮助、属性列表和实例。不执行命令行上的命令。

 
-int interval
 

指定 imqcmd 显示代理标准的时间间隔,以秒为单位。(与 metrics 子命令一起使用。)

 
-javahome
 

指定可使用的替代 Java 2 兼容运行时(默认使用产品附带的运行时)。

 
-m metricType
 

指定要显示的标准类型。可以是下列类型之一:

ttl    流入和流出代理的所有消息(默认)。

rts    与 ttl 提供相同的信息,但指定了每秒钟的消息数量。

cxn    连接、虚拟内存堆、线程。

metrics bkrmetrics svc 子命令一起使用。以下命令每隔五秒钟显示一次默认代理的 cxn 类型的标准。

imqcmd metrics bkr -m cxn -int 5

 
-n argumentName
 

指定子命令参数的名称。根据子命令的不同,它可能是服务名称、物理目标、长期订阅或
事务 ID。

 
-o attribute=value
 

指定属性的值。根据子命令参数的不同,它可能是代理属性(请参阅查询和更新代理属性)、服务属性(请参阅管理连接服务)或目标属性(请参阅管理目标)。

 
-secure
 

使用 ssladmin 连接服务指定代理的安全管理连接(请参阅步骤 4:配置并运行基于 SSL 的客户机命令行实用程序 (imqcmd))。

 
-p password
 

指定管理员的密码。如果省略此值,系统会提示您输入密码。

 
-s
 

无提示模式。不显示任何输出。

 
-t destinationType
 

指定目标的类型:t(主题)或 q(队列)。

 
-tmp
 

显示临时目标。

 
-u name
 

指定管理员的用户名。如果省略此值,系统会提示您输入用户名。

 
-v
 

显示版本信息。不执行命令行上的命令。

 

每次发出一个 imqcmd 子命令时,都必须指定以下选项:主机名和端口号 (-b)、用户名 (-u)、密码 (-p) 和安全连接 (-secure)。如果不指定主机名和端口号,系统将使用默认值。如果不指定用户名和密码,系统会提示您输入这些信息。如果不指定 -secure,连接将是不安全的。

使用 imqcmd 的前提条件

要使用 imqcmd 命令管理代理,必须执行以下操作:

  • 使用 imqbrokerd 命令启动代理。
  • 请参阅启动代理。命令行实用程序只能用于管理正在运行的代理,不能用于启动代理。

  • 如果代理没有在本地主机的 7676 端口上运行,必须使用 -b 选项指定目标代理。
  • 指定适当的管理员用户名和密码。如果不指定,系统会提示您输入这些信息。总之请记住,使用 imqcmd 执行的每一个操作都要在用户系统信息库中进行验证。
  • 安装 MQ 时,系统会安装默认的用户系统信息库,这是一个纯文本文件。文件名为 IMQ_HOME/etc/passwd(在 Solaris 操作系统中为 /etc/imq/passwd)。系统信息库出厂时包括两个条目:一个供管理员用户使用,另一个供临时用户使用。使用这两个条目即可建立代理连接,无需执行额外的操作。例如,如果只是要测试 MQ,可以使用默认的用户名和密码 (admin/admin) 来运行实用程序。

    如果要设置生产系统,则需要完成一些额外的工作,对用户进行验证和授权。也可以将现有的 LDAP 目录服务器作为用户系统信息库。有关详细信息,请参阅验证用户

实例

以下命令将列出运行在 localhost 7676 端口上的代理的属性:

imqcmd query bkr -u admin -p admin

以下命令将列出运行在 myserver 7676 端口上的代理的属性,用户名为 alladin,密码为 abracadabra

imqcmd query bkr -b myserver:1564 -u alladin -p abracadabra

如果指定用户名 alladin 属于 admin 组,将以管理员客户机的身份连接到指定代理。

控制代理的状态

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

  • 暂停代理
  • 暂停代理将暂停代理服务线程,从而使代理停止监听端口。然后您可以执行控制代理消息流所需的管理任务。例如,当某个目标受到消息攻击时,您可以暂停该代理,然后执行下列操作之一,以期解决该问题:跟踪消息来源、限制目标的大小或销毁目标。

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

    imqcmd pause bkr -b myhost:1588

  • 恢复代理
  • 恢复代理将重新激活代理服务线程,从而使代理恢复监听端口。以下命令将恢复运行在 localhost 7676 端口上的代理。

    imqcmd resume bkr

  • 关闭代理
  • 关闭代理将终止代理进程。这属于正常终止:代理停止接收新的连接和消息,完成现有消息的传送后将终止代理进程。以下命令将关闭运行在 ctrlsrv 1572 端口上的代理。

    imqcmd shutdown bkr -b ctrlsrv:1572

  • 重新启动代理
  • 关闭并重新启动代理。以下命令将重新启动运行在 localhost 7676 端口上的代理。

    imqcmd restart bkr

表 6-3 概述了用于控制代理的 imqcmd 子命令。请记住,除非您希望代理在 localhost 7676 端口上运行,否则必须指定代理主机名和端口号。

表 6-3    用于控制代理的 imqcmd 子命令 

子命令

说明

pause bkr [-b hostName:port]
 

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

 
resume bkr [-b hostName:port]
 

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

 
shutdown bkr [-b hostName:port]
 

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

 
restart bkr [-b hostName:port]
 

关闭并重新启动默认代理或指定主机和端口上的代理。

请注意,此命令将使用第一次启动该代理时指定的选项重新启动该代理。如果要执行不同的操作,必须先关闭代理,然后再使用所需的选项重新启动它。

 

查询和更新代理属性

命令行实用程序包含的子命令可用于获取代理信息、更新代理属性。表 6-4 列出了这些子命令。

表 6-4    用于获取代理信息和更新代理的 imqcmd 子命令

子命令语法

说明

query bkr -b hostName:port
 

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

 
reload cls
 

仅适用于代理群集。强制群集中的所有代理重新装入 imq.cluster.brokerlist 属性并更新群集信息。有关详细信息,请参阅将代理添加到群集

 
update bkr [-b hostName:port]
-o attribute=value
[-o attribute=value1]...

 

更改默认代理或指定主机和端口上的代理的指定属性。

 
metrics bkr [-b hostName:port]
[-m metricType]
[-int interval]

 

显示默认代理或指定主机和端口上的代理的代理标准。

使用 -m 选项指定要显示的标准类型:

ttl    流入和流出代理的所有消息(默认)。

rts    与 ttl 提供相同的信息,但指定了每秒钟的消息数量。

cxn    连接、虚拟内存堆、线程。

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

 

请记住,使用表 6-4 中列出的子命令时,除非您希望代理在 localhost 7676 端口上运行,否则必须指定代理主机名和端口号。

查询代理

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

imqcmd query bkr

此语句的输出如下:


%imqcmd query bkr

Querying the broker specified by:

-------------------------
Host         Primary Port
-------------------------
localhost    7676

Auto Create Queues                     true
Auto Create Topics                     true
Auto Created Queue Delivery Policy     Round Robin
Cluster Broker List (active)           myhost/192.18.116.221:7676
Cluster Broker List (configured)       
Cluster Master Broker                  
Cluster URL                            
Current Number of Messages in System   0
Current Size of Messages in System     0
Instance Name                          imqbroker
Log Level                              INFO
Log Rollover Interval (seconds)        604800
Log Rollover Size (bytes)              0 (unlimited)
Max Message Size                       70m
Max Number of Messages in System       0 (unlimited)
Max Size of Messages in System         0 (unlimited)
Primary Port                           7676
Version                                3.0

Successfully queried the broker.

更新代理

可以使用 update 子命令更新表 6-5 中列出的任何代理属性。请注意,对代理的更新会自动写入代理的实例配置文件。

表 6-5    代理属性 

属性

说明

imq.autocreate.queue
 

指定是否允许代理自动创建队列目标。默认值为 True

 
imq.autocreate.topic
 

指定是否允许代理自动创建主题目标。默认值为 True

 
imq.queue.deliverypolicy
 

为自动创建的队列指定默认传送策略。有效值包括:s(单向)、
r(循环)或 f(故障切换)。默认值为 s

 
imq.cluster.url
 

指定群集配置文件的位置。有关详细信息,请参阅群集配置属性

 
imq.log.level
 

指定下列日志级别之一:NONEERRORWARNINGINFO。默认值为 INFO

 
imq.log.file.rolloversecs
 

日志文件转移前的生存期(以秒为单位)。0 表示不发生基于文件生存期的转移。默认值为 604800 秒(7 天)。

 
imq.log.file.rolloverbytes
 

指定日志文件转移前的最大文件大小。0 表示不发生基于文件大小的转移。默认值为 0。

 
imq.message.max_size
 

指定消息的最大大小(以字节为单位)。默认值为 70m

 
imq.system.max_count
 

指定内存和磁盘中的最大消息数量。0 表示没有限制。默认值为 0

 
imq.system.max_size
 

指定内存和磁盘中所有消息总大小的最大值。0 表示没有限制。默认值为 0

 
imq.portmapper.port
 

指定端口映射器的端口号。默认值为 7676

 

例如,以下命令会将队列的默认传送策略由单向改为循环。

imqcmd update bkr -o "imq.queue.deliverypolicy=r"

管理连接服务

命令行实用程序包括许多子命令,您可以使用这些子命令执行以下操作:

  • 列出可用的连接服务
  • 显示某项特定服务的信息
  • 更新某项服务的属性
  • 暂停和恢复服务

有关 MQ 连接服务的概述信息,请参阅连接服务

表 6-6 列出了控制连接服务的 imqcmd 子命令。如果没有指定主机名和端口,则假定为 localhost7676

表 6-6    用于管理连接服务的 imqcmd 子命令 

子命令语法

说明

list svc [-b hostName:port]
 

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

 
metrics svc -n serviceName
[-b hostName:port]
[-m metricType] [-int interval]

 

列出默认代理或指定主机和端口上的代理中指定服务的标准。

使用 -m 选项指定要显示的标准类型:

ttl    流入和流出代理的所有消息(默认)。

rts    与 ttl 提供相同的信息,但指定了每秒钟的消息数量。

cxn    连接、虚拟内存堆、线程。

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

 
query svc -n serviceName
[-b hostName:port]

 

显示运行在默认代理或指定主机和端口上的代理中的指定服务的信息。

 
pause svc -n serviceName
[-b hostName:port]

 

暂停运行在默认代理或指定主机和端口上的代理中的指定服务。不能暂停管理服务。

 
resume svc -n serviceName
[-b hostName:port]

 

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

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

 

更新运行在默认代理或指定主机和端口上的代理中的指定服务的指定属性。有关服务属性的说明,请参阅表 6-8

 

代理支持与应用程序客户机和管理客户机的通信。表 6-7 显示了 MQ 代理当前支持的连接服务。“服务名称”一栏中的值用于为 -n 选项指定服务名称。(正如该表所示,每项服务都是通过它使用的服务类型 — NORMAL(JMS) 或 ADMIN — 和底层传输层来指定的。)

表 6-7    代理所支持的连接服务 

服务名称

服务类型

协议类型

jms

 

NORMAL(JMS 消息传送)

 

tcp

 

ssljms
(企业版)

 

NORMAL(JMS 消息传送)

 

tls(基于 SSL 的安全性)

 

httpjms
(企业版)

 

NORMAL(JMS 消息传送)

 

http

 

httpsjms
(企业版)

 

NORMAL(JMS 消息传送)

 

https(基于 SSL 的安全性)

 

admin

 

ADMIN

 

tcp

 

ssladmin
(企业版)

 

ADMIN

 

tls(基于 SSL 的安全性)

 

列出连接服务

要列出某个代理支持的连接服务,请使用如下命令:

imqcmd list svc [-b 主机名:端口号]

例如,以下命令将列出运行在 MyServer 主机 6565 端口上的代理所支持的服务。

imqcmd list svc -b MyServer:6565

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

imqcmd list svc

该命令的输出信息如下:


Listing all the services on the broker specified by:

Host                 Primary Port
localhost            7676

Service Name     Port Number       Service State
admin            33984 (dynamic)   RUNNING
httpjms                            UNKNOWN
httpsjms         -                 UNKNOWN
jms              33983 (dynamic)   RUNNING
ssladmin         dynamic           UNKNOWN
ssljms           dynamic           UNKNOWN

Successfully listed services.

查询和更新服务属性

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

imqcmd query svc -n jms

此语句的输出如下:


Querying the service where:

Service Name
jms

On the broker specified by:

Host                         Primary Port
localhost                    7676


Current Number of Allocated Threads    120
Current Number of Connections          20
Max Number of Threads                  1000
Min Number of Threads                  50
Port Number                            42019 (dynamic)
Service Name                           jms
Service State                          RUNNING

Successfully queried the service.

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

表 6-8    连接服务属性

属性

说明

port
 

为要更新的服务指定的端口(不适用于 httpjms 和 httpsjms)。

 
minThreads
 

为服务指定的最小线程数。

 
maxThreads
 

为服务指定的最大线程数。

 

以下命令将指定给 jms 服务的最小线程数更改为 20。

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

暂停和恢复服务

要暂停除管理服务之外的其它服务(不能暂停管理服务),请使用如下命令:

imqcmd pause svc -n serviceName

要恢复某项服务,请使用如下命令:

imqcmd resume svc -n serviceName

管理目标

所有 MQ 消息都是通过在特定代理上创建的目标、队列和主题路由到其使用方客户机上的。您负责在代理上管理这些目标。管理任务包括使用命令行实用程序创建和销毁目标、列出目标、显示目标的相关信息以及清理消息。有关目标的介绍,请参阅物理目标

表 6-9 概述了 imqcmd 目标子命令。如果不使用默认代理 (localhost:7676),则必须指定主机名和端口。

表 6-9    用于管理目标的 imqcmd 子命令  

子命令

说明

list dst [-tmp]
 

列出所有目标,后面的选项表示同时列出临时目标(请参阅临时目标)。

 
create dst -t type
-n destName
[-o attribute=value]
[-o attribute=value1]...

 

创建指定类型、名称和属性的目标。目标名称只能包含字母数字字符(不能包含空格),可以以字母字符或者字符“_”开头。

 
destroy dst -t type
-n destName

 

销毁指定类型和名称的目标。

 
purge dst -t type
-n destName

 

清理指定类型和名称的目标中的消息。

 
query dst -t type
-n destName

 

列出指定类型和名称的目标的相关信息。

 
update dst -t type
-n destName
-o attribute=value
[-o attribute=value1]...

 

更新指定目标上指定属性的值。

属性名称可以是表 6-10 中列出的任意属性。

 

创建目标

创建目标时,必须指定目标类型(主题或队列),如果需要,还要指定目标的属性值。这些属性的默认值是在代理的配置文件中设置的(请参阅配置文件)。

销毁目标将清理该目标中的所有消息并将该目标从代理上删除,此操作是不可恢复的。

表 6-10 列出了创建目标时,可以为每种目标类型设置的属性。

表 6-10    目标属性 

目标类型

属性

默认值

说明

队列

 
queueDeliveryPolicy
 
单向
 

表示用于路由消息的算法。

有效值包括

f = 故障切换

r = 循环

s = 单向

 

队列

 
maxTotalMsgBytes
 

0(无限制)

 

队列中允许的消息总大小的最大值(以字节为单位)。

 

队列

 
maxNumMsgs
 

0(无限制)

 

队列中允许的最大消息数量。

 

队列

 
maxBytesPerMsg
 

0(无限制)

 

队列中允许的一条消息的最大大小。

 

主题

 
maxBytesPerMsg
 

0(无限制)

 

发布到主题中的一条消息的最大大小。

 

  • 要创建队列目标,请输入如下命令:
  • imqcmd create dst -n myQueue -t q -o "queueDeliveryPolicy=f"

    请注意,目标名称必须是有效的 Java 标识符。

  • 要创建主题目标,请输入如下命令:
  • imqcmd create dst -n myTopic -t t -o "maxBytesPerMsg=5000"

获得目标的相关信息

要获得某个目标属性当前值的信息,请使用如下命令:

imqcmd query dst -t q -n XQueue

然后可以使用 update imqcmd 子命令更改一个或多个属性的值。

要列出特定代理(例如,运行在 myHost 4545 端口上的代理)中的所有目标,请使用如下命令:

imqcmd list dst -b myHost:4545

使用 list 命令时可以选择是否列出临时目标(使用 -tmp 选项)。临时目标是由客户机应用程序创建的,该应用程序需要一个目标来接收发送到其它客户机上的消息的回复(请参阅临时目标)。您不能销毁这些目标;只有当不再存在活动的消息使用方时,才能通过客户机应用程序的 API 调用来销毁。

更新目标

可以使用 update dst 子命令更改目标的属性,而使用 -o 选项指定要更新的属性。如果要更新多个属性,可以多次使用 -o 选项。例如,以下命令将 maxBytesPerMsg 属性更改为 1000,同时将 MaxNumMsgs 属性更改为 2000

imqcmd update dst -t q -n myQueue -o "maxBytesPerMsg=1000"
-o maxNumMsgs=2000

要获得可以更新的属性列表,请参阅表 6-10

不能使用 update dst 子命令更新目标的 type 属性或队列的队列传送策略。

清理目标

可以清理某个目标上当前排队的所有消息。清理目标意味着物理目标上排队的所有消息都将被删除。当目标中堆积的消息占用了大量系统资源时,您可能需要清理掉这些消息。这可能发生在某个队列没有注册使用方客户机,但仍在接收大量消息的情况下。也可能发生在某个主题的长期订户始终处于非活动状态的情况下。在上述两种情况下,都没有必要保留消息。

要清理目标上的消息,请输入如下命令:

imqcmd purge dst -n myQueue -t q

imqcmd purge dst -n myTopic -t t

如果关闭代理后不希望重新启动时传送旧消息,可以使用 imqbrokerd 命令的 reset 子命令将这些旧消息清理掉,如下所示:

imqbrokerd -reset messages

这样可以避免重新启动代理后清理目标的麻烦。

销毁目标

要销毁目标,请输入如下命令:

imqcmd destroy dst -t q -n myQueue

管理长期订阅

要管理代理的长期订阅,可以使用 imqcmd 子命令。长期订阅是指某台客户机长期注册订阅某个主题;长期订阅有一个唯一标识,要求代理保留该订阅的消息,即使消息使用方处于非活动状态。通常情况下,代理只能在消息已过期的情况下删除为长期订户保留的消息。

表 6-12 概述了 imqcmd 长期订阅子命令。如果不使用默认代理 (localhost:7676),则必须指定主机名和端口。

表 6-11    用于管理长期订阅的 imqcmd 子命令 

子命令

说明

list dur -d destination
 

列出指定目标的所有长期订阅。

 
destroy dur -n subscrName
-c client_id

 

销毁指定客户机 ID 的指定长期订阅(请参阅客户机标识符)。

 
purge dur -n subscrName
-c client_id

 

清理指定客户机 ID 的所有消息(请参阅客户机标识符)。

 

例如,以下命令将列出 SPQuotes 主题下的所有长期订阅:

imqcmd list dur -d SPQuotes

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


Listing all the durable subscriptions on the topic myTopic
on the broker specified by:
-------------------------
Host         Primary Port
-------------------------
localhost    7676

Name        Client ID       Number of   Durable Sub
                            Messages      State
----------------------------------------------------------------
myDurable   myClientID       1           INACTIVE

Successfully listed durable subscriptions.

可以使用 list 命令返回的信息标识希望销毁或清理其消息的长期订阅。使用订阅名称和客户机 ID 可以标识订阅。例如:

imqcmd destroy dur -n myDurable -c myClientID

管理事务

客户机应用程序启动的所有事务都由代理进行跟踪。这些事务可以是 XA 资源管理器管理的简单 MQ 事务或分布式事务(请参阅本地事务)。所有事务都有一个 MQ 事务 ID,这是一个 64 位的数字,唯一标识代理上的每个事务。分布式事务也有一个分布式事务 ID (XID),长度为 128 字节,由分布式事务管理器指定。MQ 负责维护 MQ 事务 ID 与 XID 之间的关联。

对于分布式事务来说,失败的事务可能会保持 PREPARED 状态,而不会提交。因此,管理员需要监视并在需要时回滚或提交那些处于 PREPARED 状态的事务。

表 6-12 概述了 imqcmd 事务子命令。如果不使用默认代理 (localhost:7676),则必须指定主机名和端口。

表 6-12    用于管理事务的 imqcmd 子命令 

子命令

说明

list txn
 

列出代理跟踪的所有事务。

 
query txn -n transaction_id
 

列出指定事务的相关信息。

 
commit txn -n transaction_id
 

提交指定的事务。

 
rollback txn -n transaction_id
 

回滚指定的事务。

 

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

imqcmd list txn

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


Listing all the transactions on the broker specified by:
-------------------------
Host         Primary Port
-------------------------
localhost    7676

---------------------------------------------------------------
Transaction ID  State    User name   # Msgs/   Creation time
                                     # 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

Successfully listed transactions.

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

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

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

query 子命令也可以显示这些信息,除此之外,它还显示以下信息:客户机 ID、连接标识和分布式事务 ID (XID)。例如:

imqcmd query txn -n 64248349708800

此语句的输出如下:


Querying the transaction where:
-------------------------
Transaction ID
-------------------------
64248349708800

On the broker specified by:

-------------------------
Host         Primary Port
-------------------------
localhost    7676


Client ID
Connection                 guest@192.18.116.219:62209->jms:62195
Creation time              1/30/02 10:08:31 AM
Number of acknowledgements 0
Number of messages         4
State                      PREPARED
Transaction ID             64248349708800
User name                  guest
XID
6469706F6C7369646577696E6465723130313234313431313030373230

Successfully queried the transaction.

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

imqcmd commit txn -n 64248349708800

您也可以配置代理,使它在启动时自动回滚处于 PREPARED 状态的事务。有关详细信息,请参阅表 2-4 中的 imq.transaction.autorollback 属性。


上一个      目录      索引      下一个     
版权所有 2002 Sun Microsystems, Inc.。保留所有权利。


部件号 817-5020-10