管理工具使管理員能定義八種類型的 MQ JMS 對象並把它們存儲到 JNDI 名稱空間中。然後,JMS 客戶機可以通過 JNDI 檢索名稱空間中的這些受管理對象和使用它們。
可以通過使用本工具來管理的 JMS 對象有:
1.MQQueueConnectionFactory
2.MQTopicConnectionFactory
3.MQQueue
4.MQTopic
5.MQXAQueueConnectionFactory
6.MQXATopicConnectionFactory
7.JMSWrapXAQueueConnectionFactory
8.JMSWrapXATopicConnectionFactory
調用管理工具
管理工具具有一個命令行界面。可以交互式地使用它,也可以用它來啓動一個批處理。交互方式提供了一個命令提示,可以在提示上輸入管理命令。在批處理方式中,啓動工具的命令中包括了含有管理命令腳本的文件名稱。
要以交互方式啓動工具,請輸入命令:
JMSAdmin [-t] [-v] [-cfg config_filename]
其中:
-t
啓用跟蹤(缺省是跟蹤關閉)
-v
產生詳細輸出(缺省是 terse 輸出)
-cfg config_filename
替代配置文件的名稱
顯示命令提示後,表明此工具可以開始接受管理命令了。此提示最初如以下形式出現:
InitCtx>
表明當前的上下文(也就是所有命名與目錄指向的 JNDI 上下文)是在 PROVIDER_URL 配置參數中定義的初始上下文
當遍歷目錄名稱空間時,提示將更改以反映這個移動,從而使提示總是顯示當前的上下文。
要以批處理方式啓動工具,請輸入命令:
JMSAdmin <test.scp
其中 test.scp 是包含管理命令的腳本文件。文件中的最後一個命令必須是 END 命令。
管理命令
當顯示命令提示時,表明此工具可以開始接受命令了。管理命令的格式通常是:
verb [param]*
所有有效命令都至少包含一個(並且只有一個)動詞,它以標準或簡短形式出現在命令的開頭。
動詞可使用的參數取決於該動詞。例如,動詞 END 不能使用任何參數,但是動詞 DEFINE 則可以使用任何在 1 和 20 之間的參數。本章以後的部分中將詳細討論至少使用了一個參數的動詞。
動詞 |
描述 | |
標準 |
簡短形式 | |
ALTER |
ALT |
更改給定管理對象中的至少一個特性 |
DEFINE |
DEF |
創建並存儲管理對象,或創建一個新的子上下文。 |
DISPLAY |
DIS |
顯示存儲的一個或多個管理對象的特性或當前上下文的內容 |
DELETE |
DEL |
從名稱空間中刪除一個或多個管理對象或刪除一個空的子上下文 |
CHANGE |
CHG |
改變當前上下文,允許用戶轉換初始上下文下任何地方的目錄名稱空間(暫掛安全性確認) |
COPY |
CP |
複製存儲的受管理對象,並用另一個名稱存儲它 |
MOVE |
MV |
改變存儲的受管理對象的名稱 |
END |
|
關閉管理工具 |
動詞名不區分大小寫。
通常,要終止命令時請按下回車鍵。但是,也可以在回車之前通過直接輸入 '+' 號來覆蓋它。這將使您能輸入多行的命令,如以下示例所示:
DEFINE Q(BookingsInputQueue) +
QMGR(QM.POLARIS.TEST) +
QUEUE(BOOKINGS.INPUT.QUEUE) +
PORT(1415) +
CCSID(437)
以字符 *、# 或 / 開始的行表示一個註解或忽略的行。
操縱子上下文
可以使用動詞 CHANGE、DEFINE、DISPLAY 和 DELETE 來操縱目錄名稱空間子上下文。
語法 |
描述 |
DEFINE CTX(ctxName) |
嘗試創建當前上下文的新子女子上下文,使用名稱 ctxName。如果安全性違例,或是子上下文已經存在,又或者提供的名稱無效則失敗。 |
DISPLAY CTX |
顯示當前上下文的內容。管理對象用 'a' 註釋,子上下文用 '[D]' 註釋。此外,還顯示每個對象的 Java 類型。 |
DELETE CTX(ctxName) |
嘗試刪除當前上下文的名爲 ctxName 的子上下文。如果沒有找到上下文,或上下文是非空的,或如果有安全性違例,則失敗。 |
CHANGE CTX(ctxName) |
改變當前上下文,以便它現在可以引用名爲 ctxName 的子上下文。將提供 ctxName 的兩個特殊值中的一個: =UP 移動到當前上下文的父代 =INIT 直接移動到初始上下文 如果不存在指定的上下文,或是有安全性違例,則失敗。 |
管理 JMS 對象
這一部分描述管理工具可以處理的八種對象類型。詳細描述它們的每個配置特性以及可操縱它們的每個動詞。
對象類型
由管理工具處理的 JMS 對象類型
對象類型 |
描述 | |
Java |
關鍵字 | |
MQQueueConnectionFactory |
QCF |
JMS QueueConnectionFactory 接口的 MQSeries 實現。它表示了用於在 JMS 的點到點域中創建連接的工廠對象。 |
MQTopicConnectionFactory |
TCF |
JMS TopicConnectionFactory 接口的 MQSeries 實現。它表示了用於在 JMS 的發佈/訂閱域中創建連接的工廠對象。 |
MQQueue |
Q |
JMS Queue 接口的 MQSeries 實現。它表示了在 JMS 的點到點域中的消息目的地。 |
MQTopic |
T |
JMS Topic 接口的 MQSeries 實現。它表示了 JMS 的發佈/訂閱域中的消息目的地。 |
MQXAQueueConnectionFactory1 |
XAQCF |
JMS XAQueueConnectionFactory 接口的 MQSeries 實現。它表示了用於在使用 XA 版本的 JMS 類的 JMS 的點到點域中創建連接的工廠對象。 |
MQXATopicConnectionFactory1 |
XATCF |
JMS XATopicConnectionFactory 接口的 MQSeries 實現。它表示了用於在使用 XA 版本的 JMS 發佈/訂閱域中創建連接的工廠對象。 |
JMSWrapXAQueueConnectionFactory2 |
WSQCF |
JMS QueueConnectionFactory 接口的 MQSeries 實現。它表示了用於在使用 XA 版本的 JMS 類的 JMS 域的點到點域中創建與 WebSphere 連接的工廠對象。 |
JMSWrapXATopicConnectionFactory2 |
WSTCF |
JMS TopicConnectionFactory 接口的 MQSeries 實現。它表示了用於在使用 XA 版本的 JMS 類的 JMS 發佈/訂閱域中創建與 WebSphere 連接的工廠對象。 |
|
與 JMS 對象一起使用的動詞
可以使用動詞 ALTER、DEFINE、DISPLAY、DELETE、COPY 和 MOVE 來操縱目錄名稱空間中的受管理對象。 下表概述了它們的用法。
操縱管理對象的命令語法與說明
命令語法 |
描述 |
ALTER TYPE(name) [property]* |
試圖更新給定受管理對象提供的特性。如果有安全性,或是沒有找到指定的對象,或是提供的新特性無效,則失敗。 |
DEFINE TYPE(name) [property]* |
嘗試創建類型爲 TYPE 並帶有所提供特性的管理對象,並嘗試把它存儲到當前上下文中名稱 name 下。 |
DISPLAY TYPE(name) |
顯示類型爲 TYPE 的管理對象的特性,它綁定在當前上下文中的名稱 name 下。 |
DELETE TYPE(name) |
嘗試除去類型爲 TYPE 的受管理對象的特性,它在當前上下文中,名爲 name。 |
COPY TYPE(nameA) |
複製類型爲 TYPE 的受管理對象 nameA,並把副本命名爲 nameB。所有這些都發生在當前上下文的作用域中。 |
MOVE TYPE(nameA) TYPE(nameB) |
將類型爲 TYPE 的受管理對象 nameA 移動(重命名)到 nameB。所有這些都發生在當前上下文的作用域中。 |
創建對象
使用以下命令語法創建對象並存儲到 JNDI 名稱空間中:
DEFINE TYPE(name) [property]*
即,動詞 DEFINE,後跟 TYPE(name) 引用的管理對象,最後是零個或多個特性
LDAP 命名考慮事項
要在 LDAP 環境下存儲對象,對象名必須遵循一定的約定。其中之一就是對象及子上下文的名稱必須包含一個前綴,例如 cn=(公共名稱)或 ou=(組織單位)。
管理工具通過允許您引用不帶前綴的對象和上下文名稱來簡化 LDAP 服務供應商的使用。如果不提供前綴,則工具將把缺省前綴(當前是 cn=)自動添加到您提供的名稱。
以下示例顯示了上述情況。
InitCtx> DEFINE Q(testQueue)
InitCtx> DISPLAY CTX
Contents of InitCtx
a cn=testQueue com.ibm.mq.jms.MQQueue
1 Object(s)
0 Context(s)
1 Binding(s), 1 Administered
注意,即使提供的對象名 (testQueue) 沒有前綴,工具會自動添加一個以確保符合 LDAP 的命名約定。同樣,提交 DISPLAY Q(testQueue) 時也會添加該前綴。
可能需要配置 LDAP 服務器以存儲 Java 對象。中提供了有關此配置的幫助信息。
特性
特性由以下格式的名稱-值對組成:
PROPERTY_NAME(property_value)
特性名不區分大小寫,並受限於下表中顯示的可識別名稱集。該表還顯示了每一特性的有效特性值。
表 10. 特性名與有效值
特性 |
有效值(缺省值用黑體表示) | |
標準 |
縮寫形式 | |
DESCRIPTION |
DESC |
任何字符串 |
TRANSPORT |
TRAN |
|
CLIENTID |
CID |
任何字符串 |
QMANAGER |
QMGR |
任何字符串 |
HOSTNAME |
HOST |
任何字符串 |
PORT |
|
任何正整數 |
CHANNEL |
CHAN |
任何字符串 |
CCSID |
CCS |
任何正整數 |
RECEXIT |
RCX |
任何字符串 |
RECEXITINIT |
RCXI |
任何字符串 |
SECEXIT |
SCX |
任何字符串 |
SECEXITINIT |
SCXI |
任何字符串 |
SENDEXIT |
SDX |
任何字符串 |
SENDXITINIT |
SDXI |
任何字符串 |
TEMPMODEL |
TM |
任何字符串 |
MSGRETENTION |
MRET |
|
BROKERVER |
BVER |
V1 - 當前只允許這個值。 |
BROKERPUBQ |
BPUB |
任何字符串(缺省值是 SYSTEM.BROKER.DEFAULT.STREAM) |
BROKERSUBQ |
BSUB |
任何字符串(缺省值是 SYSTEM.JMS.ND.SUBSCRIPTION.QUEUE) |
BROKERDURSUBQ |
BDSUB |
任何字符串(缺省值是 SYSTEM.JMS.D.SUBSCRIPTION.QUEUE) |
BROKERCCSUBQ |
CCSUB |
任何字符串(缺省值是 SYSTEM.JMS.ND.CC.SUBSCRIPTION.QUEUE) |
BROKERCCDSUBQ |
CCDSUB |
任何字符串(缺省值是 SYSTEM.JMS.D.CC.SUBSCRIPTION.QUEUE) |
BROKERQMGR |
BQM |
任何字符串 |
BROKERCONQ |
BCON |
任何字符串 |
EXPIRY |
EXP |
|
PRIORITY |
PRI |
|
PERSISTENCE |
PER |
|
TARGCLIENT |
TC |
|
ENCODING |
ENC |
參閱ENCODING 特性 |
QUEUE |
QU |
任何字符串 |
TOPIC |
TOP |
任何字符串 |
許多特性僅與特定的對象類型子集相關。下表顯示了哪些特性-對象類型的組合是有效的,並對每個特性給出了簡要的描述。
特性與對象類型的有效組合
特性 |
有效對象類型 |
描述 | |||||
QCF |
TCF |
Q |
T |
WSQCF |
WSTCF | ||
DESCRIPTION |
Y |
Y |
Y |
Y |
Y |
Y |
對存儲對象的描述。 |
TRANSPORT |
Y |
Y |
|
|
Y1 |
Y1 |
連接是否使用 MQ Bingdings 或客戶機連接 |
CLIENTID |
Y |
Y |
|
|
Y |
Y |
客戶機的字符串標識 |
QMANAGER |
Y |
Y |
Y |
|
Y |
Y |
要連接到的隊列管理器的名稱 |
PORT |
Y |
Y |
|
|
|
|
隊列管理器正在偵聽的端口 |
HOSTNAME |
Y |
Y |
|
|
|
|
隊列管理器所在的主機名稱 |
CHANNEL |
Y |
Y |
|
|
|
|
要使用的客戶機連接通道 |
CCSID |
Y |
Y |
Y |
Y |
|
|
連接中要使用的 coded-character-set-ID |
RECEXIT |
Y |
Y |
|
|
|
|
使用的接收出口的全限定類名 |
RECEXITINIT |
Y |
Y |
|
|
|
|
接收出口初始化字符串 |
SECEXIT |
Y |
Y |
|
|
|
|
要使用的安全性出口的全限定類名 |
SECEXITINIT |
Y |
Y |
|
|
|
|
安全性出口的初始化字符串 |
SENDEXIT |
Y |
Y |
|
|
|
|
要使用的發送出口的全限定類名 |
SENDEXITINIT |
Y |
Y |
|
|
|
|
發送出口的初始字符串 |
TEMPMODEL |
Y |
|
|
|
Y |
|
從中創建臨時隊列的模型隊列名稱 |
MSGRETENTION |
Y |
|
|
|
Y |
|
連接使用者是否在輸入隊列中保留了不需要的消息 |
BROKERVER |
|
Y |
|
|
|
Y |
要使用的代理的版本 |
BROKERPUBQ |
|
Y |
|
|
|
Y |
代理輸入隊列(流隊列)的名稱 |
BROKERSUBQ |
|
Y |
|
|
|
Y |
檢索非長期訂閱消息的隊列名稱 |
BROKERDURSUBQ |
|
|
|
Y |
|
|
檢索長期訂閱消息的隊列名稱 |
BROKERCCSUBQ |
|
Y |
|
|
|
Y |
爲 ConnectionConsumer 檢索非長期訂閱消息的隊列名稱 |
BROKERCCDSUBQ |
|
|
|
Y |
|
|
爲 ConnectionConsumer 檢索長期訂閱消息的隊列名稱 |
BROKERQMGR |
|
Y |
|
|
|
Y |
運行着代理的隊列管理器 |
BROKERCONQ |
|
Y |
|
|
|
Y |
代理的控制隊列名稱 |
EXPIRY |
|
|
Y |
Y |
|
|
一個時間段,在該時間段後目的地上的消息將失效 |
PRIORITY |
|
|
Y |
Y |
|
|
發送到目的地的消息的優先級 |
PERSISTENCE |
|
|
Y |
Y |
|
|
發送到目的地的消息的持續性 |
TARGCLIENT |
|
|
Y |
Y |
|
|
字段表明是否使用 MQSeries RFH2 格式與目標應用程序交換信息 |
ENCODING |
|
|
Y |
Y |
|
|
該目的地使用的編碼方案 |
QUEUE |
|
|
Y |
|
|
|
表示目的地的隊列的基本名稱 |
TOPIC |
|
|
|
Y |
|
|
表示目的地的主題的基本名稱 |
記錄:
1. 對於 WSTCF、WSQCF、XATCF 和 XAQCF 對象,只能使用 BIND 傳送類型。
- 管理工具特性與可編程特性之間的映射顯示了工具設置的特性和可編程特性之間的關係。
- TARGCLIENT 特性表明了是否使用 MQSeries RFH2 格式與目標應用程序交換信息。
常量 MQJMS_CLIENT_JMS_COMPLIANT 表明將使用 RFH2 格式來發送信息。使用 MQ JMS 的應用程序瞭解 RFH2 格式。在與目標 MQ JMS 應用程序交換信息時應設置 MQJMS_CLIENT_JMS_COMPLIANT 常量。
常量 MQJMS_CLIENT_NONJMS_MQ 表明將使用 RFH2 格式來發送信息。通常,該值用於現有的 MQSeries 應用程序(即,它不處理 RFH2)。
特性相關性
某些特性在彼此之間有着相關性。這就是說,僅提供一個特性是毫無意義的,只有把另一個特性設置成某個特定的值時纔有意義。會發生這種情況的兩個特定特性是“客戶機特性”和“出口化初始字符串”。
客戶機特性
如果 TRANSPORT(CLIENT) 特性沒有顯式地設置在連接工廠上,則提供連接上使用的傳送的工廠是 MQ Bindings。因此,不能在該連接工廠上配置任何客戶機特性。這些特性是:
· HOST
· PORT
· CHANNEL
· CCSID
· RECEXIT
· RECEXITINIT
· SECEXIT
· SECEXITINIT
· SENDEXIT
· SENDEXITINIT
如果嘗試在沒有爲 CLIENT 設置 TRANSPORT 特性的情況下設置這些特性中的任何一個,將出錯。
出口初始化字符串
除非已提供了相應的出口名,否則設置任何出口初始化字符串都是無效的。出口初始化特性有:
· RECEXITINIT
· SECEXITINIT
· SENDEXITINIT
例如,指定 RECEXITINIT(myString) 時沒有指定 RECEXIT(some.exit.classname) 將出錯。
ENCODING 特性
ENCODING 可以採用的有效值比其它特性更復雜。編碼特性是通過三個子特性來構造的:
整數編碼
這是標準編碼或反碼編碼
十進制編碼
這是標準編碼或反碼編碼
浮點編碼
這是 IEEE 標準編碼、IEEE 反碼編碼或 System/390(R)
ENCODING 由具有下列語法的三個字符組成的字符串來表示:
{N|R}{N|R}{N|R|3}
在該字符串中:
- N 表示標準編碼
- R 表示反碼編碼
- 3 表示 System/390
- 第一個字符表示整數編碼
- 第二個字符表示十進制編碼
- 第三個字符表示浮點編碼
它爲 ENCODING 特性提供了十二種可能值的集合。
還有一個附加的值,字符串 NATIVE,它用於爲 Java 平臺設置適當的編碼值。
下列示例顯示了 ENCODING 的有效組合:
ENCODING(NNR)
ENCODING(NATIVE)
ENCODING(RR3)
樣本錯誤條件
這個部分提供了在創建對象期間可能發生的錯誤條件。
未知特性
InitCtx/cn=Trash> DEFINE QCF(testQCF) PIZZA(ham and mushroom)
無法創建有效對象,請檢查所提供的參數
未知特性:PIZZA
無效的對象特性
InitCtx/cn=Trash> DEFINE QCF(testQCF) PRIORITY(4)
無法創建有效對象,請檢查所提供的參數
無效 QCF 特性:PRI
無效的特性值類型
InitCtx/cn=Trash> DEFINE QCF(testQCF) CCSID(english)
無法創建有效對象,請檢查所提供的參數
CCS 特性值無效:英語
特性值超出有效範圍
InitCtx/cn=Trash> DEFINE Q(testQ) PRIORITY(12)
無法創建有效對象,請檢查所提供的參數
無效的 PRI 特性值:12
特性衝突 - 客戶機/綁定
InitCtx/cn=Trash> DEFINE QCF(testQCF) HOSTNAME(polaris.hursley.ibm.com)
無法創建有效對象,請檢查所提供的參數
上下文中無效特性:客戶機-綁定屬性衝突
特性衝突 - 出口初始化
InitCtx/cn=Trash> DEFINE QCF(testQCF) SECEXITINIT(initStr)
無法創建有效對象,請檢查所提供的參數
上下文中無效特性:提供了 ExitInit 字符串
沒有 Exit 字符串
1。能否利用觸發器做數據分發?
2。用兩個隊列管理器做集羣,測試一下故障轉移?
3。隊列如何共享?
4。結合SSL和JMS?
5.觸發器和出口之間有何區別?
觸發
隊列管理器把某些條件定義爲觸發器事件(trigger event)。如果對於一個隊列啓用了觸發而且發生了觸發器事件,那麼隊列管理器把觸發器消息發送到被稱爲初始隊列(initiation queue)的隊列。初始隊列中觸發器消息的存在表明發生了觸發器事件。隊列管理器生成的觸發器消息不是持久的。
處理初始隊列的程序被稱爲觸發器監視器應用程序(trigger monitor application),它的功能是讀取觸發器消息,然後根據觸發器消息中的信息執行適當的操作。在通常的情況下,該操作啓動一些其他應用程序來處理生成觸發器消息的隊列。從隊列管理器的角度來看,觸發器監視器應用程序並沒有什麼特別的地方 — 它僅僅是另一個從隊列(初始隊列)中讀取消息的應用程序。
如果對於一個隊列啓用了觸發,那麼您可以創建與它關聯的過程定義對象(process-definition object)。該對象包含了處理引起觸發器事件的消息的應用程序的有關信息。如果過程定義對象被創建,那麼隊列管理器抽取這些信息並把它們放置在觸發器消息中以使觸發器監視器應用程序可以使用這些信息。ProcessName 本地隊列屬性給出了與隊列關聯的過程定義的名稱。每個隊列可以指定不同的過程定義,或者,幾個隊列可以共享相同的過程定義。
對於隊列管理器來說,觸發器監視器類似於任何其他爲隊列服務的應用程序,唯一的差別是它僅爲初始隊列提供服務。觸發器監視器通常是不停地運行的應用程序。當觸發器消息到達初始隊列時,觸發器監視器檢索該消息。它使用消息中的信息來發布命令,該命令將啓動處理應用程序隊列中的消息的應用程序。