![]() |
Sun ONE Message Queue, Version 3.0.1 管理員指南 |
本章介紹如何執行與管理代理程式及其提供的服務相關的工作。其中的某些工作獨立於任何特定的用戶端應用程式。這些工作包括:
- 控制代理程式的狀態:您可以暫停、繼續、關閉以及重新啟動代理程式
- 查詢與更新代理程式屬性
- 查詢與更新連線服務
- 配置與管理資源
- 管理連線服務
其他代理程式工作作為特定應用程式執行;這些工作包括管理實體目標、持久訂閱以及異動:
- 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 子指令
指令公用程式 (imqcmd) 包括表格 6-1 中列出的子指令:
imqcmd 選項摘要
表格 6-2 列出了 imqcmd 指令的選項。如需它們用法的說明,請參閱以下基於工作的各節。
表格 6-2    imqcmd 選項
選項
描述
-b hostName:port
指定代理程式主機名稱及其連接埠號。預設值為 localhost:7676。
僅指定連接埠:-b :7878
僅指定名稱:-b somehost-c clientID
將持久訂閱者的 ID 指定至主題。如需更多資訊,請參閱管理持久訂閱。
-d topicName
指定主題名稱。與 list dur 和 destroy dur 子指令配合使用。請參閱管理持久訂閱。
-f
未經使用者確認即執行動作。
-h
顯示用法說明。不執行指令行上的其他任何指令。
-H
顯示用法說明、屬性清單和範例。不執行指令行上的其他任何指令。
-int interval
指定 imqcmd 顯示代理程式標準資訊的間隔時間 (以秒為單位)。(與 metrics 子指令配合使用。)
-javahome
指定要使用的替代 Java 2 相容運行時間 (預設為使用產品隨附的運行時間)。
-m metricType
指定要顯示的標準資訊的類型。可能是以下類型之一
ttl 代理程式傳入和傳出的訊息總數 (預設)。
rts 提供與 ttl 相同的資訊,但指定每秒的訊息數量。
cxn 連線、虛擬記憶體堆疊、執行緒。
將此選項與 metrics bkr 或 metrics 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 指令啟動代理程式。
請參閱啟動代理程式。您僅可以使用指令公用程式管理執行中的代理程式;您不能使用它啟動代理程式。
- 使用 -b 選項指定目標代理程式,除非代理程式正在使用連接埠 7676 的本地主機上執行。
- 指定適當的管理員使用者名稱和密碼。如果您未指定,系統將提示您提供名稱和密碼。而且,請注意您使用 imqcmd 執行的每項作業都將由使用者儲存庫認證。
當您安裝 MQ 時,同時也安裝了預設文字檔案使用者儲存庫。檔案名為 IMQ_HOME/etc/passwd (在 Solaris 上為 /etc/imq/passwd)。此儲存庫出廠時隨附兩個項目:一個用於擁有管理員權限的使用者,一個用於客人使用者。這些項目可讓您連線至代理程式而不執行任何其他工作。例如,如果您僅要測試 MQ,則可以使用您的預設使用者名稱和密碼 (admin/admin) 執行公用程式。
如果您要設定生產系統,則將需要執行一些其他工作以認證和授權使用者。您還可以選擇使用您的使用者儲存庫的現有 LDAP 目錄伺服器。如需更多資訊,請參閱認證使用者。
範例
以下指令列出在使用連接埠 7676 的 localhost 上執行的代理程式的屬性:
imqcmd query bkr -u admin -p admin
以下指令列出使用連接埠 1564 的 myserver 上執行的代理程式的屬性;使用者名稱為 alladin,使用者密碼為 abracadabra。
imqcmd query bkr -b myserver:1564 -u alladin -p abracadabra
假設使用者名稱 alladin 已指定給 admin 群組,您將作為管理用戶端連線至指定的代理程式。
控制代理程式的狀態
啟動代理程式之後,您可以使用以下 imqcmd 子指令控制代理程式的狀態。
- 暫停代理程式
暫停代理程式會暫停代理程式服務執行緒,這將導致代理程式停止偵聽連接埠。然後,您可以執行管理代理程式的訊息流量所需的任何管理工作。例如,如果某特定目標受到訊息的攻擊,則您可以暫停代理程式,並執行以下可能幫助您解決問題的任何動作:追蹤訊息來源、限制目標大小或銷毀目標。
以下指令暫停在使用連接埠 1588 的 myhost 上執行的代理程式。
imqcmd pause bkr -b myhost:1588
- 繼續代理程式
繼續代理程式會重新啟動代理程式的服務執行緒,並且此代理程式會繼續偵聽連接埠。以下指令繼續在使用連接埠 7676 的 localhost 上執行的代理程式。
imqcmd resume bkr
- 關閉代理程式
關閉代理程式會終止代理程式程序。這是適當的終止:代理程式停止接受新的連線和訊息,它將完成現有訊息的遞送並終止代理程式程序。以下指令關閉在使用連接埠 1572 的 ctrlsrv 上執行的代理程式。
imqcmd shutdown bkr -b ctrlsrv:1572
- 重新啟動代理程式
關閉並重新啟動代理程式。以下指令重新啟動在使用連接埠 7676 的 localhost 上執行的代理程式:
imqcmd restart bkr
表格 6-3 總結了用於控制代理程式的 imqcmd 子指令。請記住,您必須指定代理程式主機名稱和連接埠號,除非您的目標為在使用連接埠 7676 的 localhost 上執行的代理程式。
查詢與更新代理程式屬性
指令公用程式包括子指令,您可以使用這些子指令取得有關代理程式的資訊及更新代理程式屬性。表格 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=value]...
變更預設代理程式或指定主機和連接埠上的代理程式的指定屬性。
metrics bkr [-b hostName:port ]
[-m metricType]
[-int interval]
顯示預設代理程式或指定主機和連接埠上的代理程式的代理程式標準資訊。
使用 -m 選項以指定要顯示的標準資訊的類型:
ttl 代理程式傳入和傳出的訊息總數 (預設)。
rts 提供與 ttl 相同的資訊,但指定每秒的訊息數量。
cxn 連線、虛擬記憶體堆疊、執行緒。
使用 -int 選項以指定顯示標準資訊的間隔時間 (以秒為單位)。預設為 5 秒鐘。
請記住,當使用表格 6-4 中列出的任何子指令時,您必須指定代理程式主機名稱和連接埠號,除非您的目標為在使用連接埠 7676 的 localhost 上執行的代理程式。
查詢代理程式
若要查詢並顯示有關單一代理程式的資訊,請使用查詢子指令。例如,
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
指定日誌級別為以下之一:NONE、ERROR、WARNING 和 INFO。預設為 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 子指令。如果未指定主機名稱或連接埠,則假設它們為 localhost 和 7676。
表格 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=value 1]...
更新在預設代理程式或指定主機和連接埠上的代理程式上執行的指定服務的指定屬性。如需服務屬性的描述,請參閱表格 6-8。
代理程式支援與應用程式用戶端和管理用戶端的通訊。目前,MQ 代理程式可提供的連線服務如表格 6-7 中所示。[服務名稱] 欄中的值是指用於為 -n 選項指定服務名稱的值。(如表格中所示,每種服務均由它使用的服務類型和基本傳輸層指定,所使用的服務類型為 NORMAL (JMS) 或 ADMIN。)
列出連線服務
若要列出代理程式上可用的連線服務,請使用以下指令:
imqcmd list svc [-b hostName:portNumber]
例如,以下指令列出在使用連接埠 6565 的主機 MyServer 上執行的代理程式上的可用服務。
imqcmd list svc -b MyServer:6565
以下指令列出在使用連接埠 7676 的 localhost 上執行的代理程式上的所有服務:
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.
查詢與更新服務屬性
若要查詢並顯示有關單一服務的資訊,請使用查詢子指令。例如,
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 類型
-n 目標名稱
銷毀指定類型和名稱的目標。
purge dst -t 類型
-n 目標名稱
清除具有指定類型和名稱的目標上的訊息。
query dst -t 類型
-n 目標名稱
列出有關指定類型和名稱之目標的資訊。
update dst -t 類型
-n 目標名稱
-o 屬性=值
[-o 屬性=值 1]...
更新指定目標上的指定屬性的值。
屬性名稱可以為表格 6-10 中所述的任何屬性。
建立目標
建立目標時,您必須指定它的類型 (主題或佇列),並指定目標屬性的值 (如果需要)。這些屬性的預設值在代理程式的配置檔案 (請參閱配置檔案) 中設定。
銷毀目標會清除此目標上的所有資訊,並從代理程式中移除此目標;此作業不可逆。
表格 6-10 描述了可在建立目標時為每種類型的目標設定的屬性。
若要建立佇列目標,請輸入以下指令:
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 子指令變更一個或多個屬性的值。
若要列出特定代理程式 (如在使用連接埠 4545 的 myHost 上執行的代理程式) 上的所有目標,請使用以下指令:
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 子指令更新目標的類型,或更新佇列的佇列遞送策略。
清除目標
您可以清除目前在目標上形成佇列的所有訊息。清除目標意味著刪除在實體目標上形成佇列的所有訊息。當目標上累積的訊息佔用太多的系統資源時,您可能需要清除訊息。當佇列沒有任何註冊的使用者用戶端並要接收許多訊息時,可能需要清除訊息。如果非作用中的主題持久訂閱者未成為作用中的訂閱者,也可能需要清除訊息。在這兩種情況下,訊息均會被不必要地保留。
若要清除目標上的訊息,請輸入以下指令:
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_idID
銷毀指定用戶端識別碼 (請參閱用戶端識別碼) 的指定持久訂閱。
purge dur -n subscrName
-c client_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
管理異動
由用戶端應用程式啟動的所有異動可由代理程式追蹤。這些異動可以是簡單的 MQ 異動或由 XA 資源管理員管理的分散式異動 (請參閱本地異動)。所有異動都有 MQ 異動 ID,即在代理程式上唯一識別異動的 64 位元的號碼。分散式異動還有由分散式異動管理員指定的分散式異動 ID (XID),此 ID 長達 128 位元組。MQ 可維護 MQ 異動 ID 與 XID 的關聯。
如果發生故障,分散式異動很可能未經確定便處於 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 狀態的異動。如果您知道由於故障使異動處於此狀態,並且此異動未處於由分散式異動管理員確定的過程中,您應確定或回轉此異動。
例如,如果代理程式的自動回轉屬性設定為錯誤 (請參閱表格 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.
commit 和 rollback 子指令可用於確定或回轉分散式異動。如前面所提及,僅可確定或回轉處於 PREPARED 狀態的異動。例如:
imqcmd commit txn -n 64248349708800
還可配置代理程式,以在啟動代理程式時自動回轉處於 PREPARED 狀態的異動。請參閱表格 2-4 中的 imq.transaction.autorollback 屬性,以獲得更多資訊。