使用 MQ JMS 管理工具(From margin's blog)

管理工具使管理員能定義種類型的 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)

以字符 *# / 開始的行表示一個註解或忽略的行。

 

 

 

 

 

 

操縱子上下文

可以使用動詞 CHANGEDEFINEDISPLAY 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 連接的工廠對象。

  1. 提供這些類是爲了讓應用服務器供應商使用它們。而不是讓應用程序員直接使用它們。

  2. 如果希望您的 JMS 會話參與到由 WebSphere 協調的全局事務中,則使用 ConnectionFactory 的這種樣式。

 

JMS 對象一起使用的動詞

可以使用動詞 ALTERDEFINEDISPLAYDELETECOPYMOVE 來操縱目錄名稱空間中的受管理對象。  下表概述了它們的用法。

操縱管理對象的命令語法與說明

命令語法

描述

ALTER TYPE(name) [property]*

試圖更新給定受管理對象提供的特性。如果有安全性,或是沒有找到指定的對象,或是提供的新特性無效,則失敗。

DEFINE TYPE(name) [property]*

嘗試創建類型爲 TYPE 並帶有所提供特性的管理對象,並嘗試把它存儲到當前上下文中名稱 name 下。
如果安全性違例,或是提供的名稱無效或已經存在,又或是提供的新特性無效,則失敗。

DISPLAY TYPE(name)

顯示類型爲 TYPE 的管理對象的特性,它綁定在當前上下文中的名稱 name 下。
如果對象不存在,或安全性違例,則失敗。

DELETE TYPE(name)

嘗試除去類型爲 TYPE 的受管理對象的特性,它在當前上下文中,名爲 name
如果對象不存在,或有安全性違例,則失敗。

COPY TYPE(nameA)
TYPE(nameB)

複製類型爲 TYPE 的受管理對象 nameA,並把副本命名爲 nameB。所有這些都發生在當前上下文的作用域中。
如果要複製的對象不存在,或對象名 nameB 已經存在,或者有安全性違例,則失敗。

MOVE TYPE(nameA) TYPE(nameB)

將類型爲 TYPE 的受管理對象 nameA 移動(重命名)到 nameB。所有這些都發生在當前上下文的作用域中。
如果要移動的對象不存在,或對象名 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

  • BIND - 連接使用 MQSeries 綁定。
  • CLIENT - 使用客戶機連接。

 

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

  • Yes - 輸入隊列中保留不需要的消息

  • No - 根據配置選項來處理不需要的消息

 

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

  • APP - JMS 應用程序可以定義的失效時間。
  • UNLIM - 沒有失效時間。
  • 任何正整數,表示以毫秒計算的失效時間。

 

PRIORITY

PRI

  • APP - JMS 應用程序可以定義的優先級。
  • QDEF - 優先級使用隊列缺省值。
  • 範圍在 0-9 的任何整數。

 

PERSISTENCE

PER

  • APP - JMS 應用程序可以定義的持續性。
  • QDEF - 持續性使用隊列缺省值。
  • PERS - 消息是持續的。
  • NON - 消息是非持續的。

 

TARGCLIENT

TC

  • JMS - 消息目標是 JMS 應用程序。

  • MQ - 消息目標是一個非 JMS 的傳統 MQSeries 應用程序。

 

ENCODING

ENC

參閱ENCODING 特性

QUEUE

QU

任何字符串

TOPIC

TOP

任何字符串

許多特性僅與特定的對象類型子集相關。下表顯示了哪些特性-對象類型的組合是有效的,並對每個特性給出了簡要的描述。

特性與對象類型的有效組合

特性

有效對象類型

描述

QCF

TCF

Q

T

WSQCF
XAQCF

WSTCF
XATCF

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 傳送類型。

  1. 管理工具特性與可編程特性之間的映射顯示了工具設置的特性和可編程特性之間的關係。
  2. 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 本地隊列屬性給出了與隊列關聯的過程定義的名稱。每個隊列可以指定不同的過程定義,或者,幾個隊列可以共享相同的過程定義。

對於隊列管理器來說,觸發器監視器類似於任何其他爲隊列服務的應用程序,唯一的差別是它僅爲初始隊列提供服務。觸發器監視器通常是不停地運行的應用程序。當觸發器消息到達初始隊列時,觸發器監視器檢索該消息。它使用消息中的信息來發布命令,該命令將啓動處理應用程序隊列中的消息的應用程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章