以下各節說明 Message Queue 4.2、4.1 與 4.0 的新功能:
Sun Java System Message Queue 為全方位功能的訊息服務,可提供符合 Java Messaging Specification (JMS) 1.1 規格且可靠的非同步訊息傳送。此外,Message Queue 還提供多種 JMS 規格以外的功能,以滿足大型企業的部署需求。
Message Queue 4.2 是包含幾個增強功能與錯誤修正的次級發行版本。本節說明如何安裝或升級為 Message Queue 4.2,並說明此發行版本所包含的新功能:
如需有關 Message Queue 4.0 與 4.1 中推出之功能的資訊,請分別參閱Message Queue 4.0 的新功能與Message Queue 4.1 的新功能。
在 Message Queue 4.2 中,發佈程式現在可將訊息發佈至多個主題目標,而訂閱者可從多個主題目標使用訊息。使用包含萬用字元符號的主題目標名稱即可代表多個目標,進而達成此功能。使用這類符號名稱可讓管理員視需要建立與萬用字元命名方案一致的其他主題目標。發佈程式與訂閱者會自動發佈至增加的目標,以及從增加的目標進行取用 (萬用字元主題訂閱者比發佈程式更常用)。
此功能不會套用至佇列目標。
符號主題目標名稱的格式包含多個區段,其中萬用字元符號 (*、**、>) 可代表名稱的一或多個區段。例如,假設您的主題目標命名方案如下:
size.color.shape
其中主題名稱區段可具有下列值:
size:large、medium、small...
color:red、green、blue...
shape:circle、triangle、square...
Message Queue 支援下列萬用字元符號:
* 表示尋找單一區段
** 表示尋找一或多個區段
> 表示尋找不限數目的連續區段
因此,您可以如下表示多個主題目標:
large.*.circle 表示:
large.red.circle large.green.circle ...
**.square 代表結尾是 .square 的所有名稱,例如:
small.green.square medium.blue.square ... |
small.> 代表開頭是 small. 的所有目標名稱,例如:
small.blue.circle small.red.square ... |
若要使用此多重目標功能,您可以使用類似上述的命名方案建立主題目標。用戶端應用程式會接著建立使用符號目標名稱的發佈程式或用戶。例如:
... String DEST_LOOKUP_NAME = "large.*.circle"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicPublisher myPublisher = mySession.createPublisher(t) myPublisher.send(myMessage);
... String DEST_LOOKUP_NAME = "**.square"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicSubscriber mySubscriber = mySession.createSubscriber(t); Message m = mySubscriber.receive();
在第一個範例中,代理程式會在符合符號名稱 large.*.circle 的所有目標中,放置一個訊息副本。在第二個範例中,若至少有一個目標符合符號名稱 **.square,則會建立訂閱者;且訂閱者會從符合該符號名稱的所有目標接收訊息。若沒有目標符合符號名稱,則在出現此目標之前,不會建立訂閱者。
若管理員建立符合符號名稱的其他目標,則使用此符號名稱建立的萬用字元發佈程式會接著發佈至此目標,且使用此符號名稱建立的萬用字元訂閱者會接著接收來自此目標的訊息。
此外,Message Queue 管理工具除了會報告某主題目標的發佈程式 (產生器) 與訂閱者 (用戶) 總數之外,還會報告萬用字元發佈程式 (包含其對應符號目標名稱) 的數目,以及萬用字元訂閱者 (包含其符號目標名稱) 的數目 (若有的話)。
Message Queue 4.2 的此新功能可在將訊息傳送至代理程式時,根據 XML 模式驗證 XML 訊息文字 (而非物件) 的內容。XML 模式 (XSD) 的位置會指定為 Message Queue 目標的特性。若未指定任何 XSD 位置,則會使用 XML 文件中的 DTD 宣告,執行 DTD 驗證 (XSD 驗證包含資料類型與值範圍驗證,比 DTD 驗證嚴格)。
使用此新功能的用戶端應用程式應將 Java SE 版本升級為 JRE 1.5 或更新版本。
若要啟用 XML 模式驗證,請設定下列實體目標特性:
表 1–5 XML 模式驗證的實體目標特性
特性 |
類型 |
預設值 |
說明 |
---|---|---|---|
validateXMLSchemaEnabled |
Boolean |
false |
是否啟用 XML 模式驗證? 如果設定為 false 或未設定,則目標未啟用 XML 模試驗證。 |
XMLSchemaURIList |
String |
空值 |
以空格分隔的 XML 結構描述文件 (XSD) URI 字串清單 這些 URI 指向 XML 模式驗證 (如果有) 所使用的一或多個 XSD 位置。 如果指定多個 URI,請使用雙引號括住此值。 範例: "http://foo/flap.xsd http://test.com/test.xsd" 如果此特性未設定或為空值,且已啟用 XML 驗證,則會使用 XML 文件中指定的 DTD 執行 XML 驗證。 |
reloadXMLSchemaOnFailure |
Boolean |
false |
是否啟用 [失敗時重新載入 XML 模式]? 如果設定為 False 或未設定,則驗證失敗時不會重新載入模式。 |
啟用 XML 驗證時,Message Queue 用戶端執行階段會嘗試根據指定的 XSD (若未指定任何 XSD,則根據 DTD) 驗證 XML 訊息,再傳送至代理程式。若找不到指定的模式或無法驗證訊息,則不會傳送訊息且會丟出例外。
您可分別在使用 imqcmd create dst 指令 (建立目標時) 或 imqcmd update dst 指令 (更新時) 時設定 XML 驗證特性。您應在目標為非使用中時設定 XML 驗證特性:亦即沒有用戶及產生器,且目標中沒有訊息時。
若在執行階段無法存取 XSD,可能必須在目標為使用中時修改 XMLSchemaURIList。
若在目標為使用中時 (例如,若有產生器連線至目標) 設定了任何 XML 驗證特性,產生器必須重新連線至代理程式,變更才會生效。同理,若由於變更應用程式需求而變更了 XSD,則根據已變更之 XSD 來產生 XML 訊息的所有用戶端應用程式,均須重新連線至代理程式。
若 reloadXMLSchemaOnFailure 特性設定為 true 且 XML 驗證失敗,則 Message Queue 用戶端執行階段會嘗試重新載入 XSD,再重新嘗試驗證訊息。若驗證使用重新載入的 XSD 仍失敗,用戶端執行階段會丟出例外。
根據 X/Open 分散式作業事件模型,分散式作業事件的支援仰賴於分散式作業事件管理程式,此管理程式會追蹤並管理一或多個資源管理程式所執行的作業。在 Message Queue 4.2 中,Message Queue C-API 現在支援 XA 介面 (介於分散式作業事件管理程式與 Message Queue 之間,作為 XA 相容資源管理員),可讓在分散式作業事件處理環境 (如 BEA Tuxedo) 中執行的 Message Queue C-API 用戶端,參與分散式作業事件。
此分散式作業事件支援包含實作 XA 介面規格時所使用的下列 C-API 新功能 (以及新參數與錯誤碼):
MQGetXAConnection() MQCreateXASession()
若 C 用戶端應用程式將用於分散式作業事件環境中,則必須透過使用 MQGetXAConnection() 取得連線,並透過使用 MQCreateXASession() 建立產生與使用訊息的階段作業。管理所有分散式作業事件的啟動、確認與回復時,均透過分散式作業事件管理程式提供的 API。
X/Open XA 介面規格需要下列有關 Message Queue XA 相容資源管理員的公共資訊:
xa_switch_t 結構的名稱:sun_my_xa_switch
資源管理員的名稱:SUN_RM
要連結的 MQ C-API 程式庫:mqcrt
xa_close 字串與格式:無
xa_open 字串與格式:「;」分隔的「名稱=值」對
支援下列「名稱/值」對:
表 1–6 Message Queue 資源管理員「名稱/值」對
名稱 |
值 |
說明 |
預設值 |
---|---|---|---|
address |
host:port |
代理程式之連接埠對映器服務的 host:port。 |
localhost:7676 |
username |
string |
連線至代理程式所使用的使用者名稱 |
guest |
password |
string |
使用者名稱的密碼 |
guest |
conntype |
TCP 或 SSL |
代理程式連線的協定類型 |
TCP |
trustedhost |
true/false |
是否信任代理程式主機 (僅適用於 conntype=SSL) |
true |
certdbpath |
string |
包含 NSS 憑證與金鑰資料庫檔案之目錄的完整路徑 |
未設定 |
clientid |
string |
僅 JMS 長期訂閱才需要 |
未設定 |
reconnects |
integer |
對代理程式的重新連線嘗試次數 (0 表示不重新連線) |
0 |
若要設計使用分散式作業事件的應用程式,可以建立在作業事件管理程式環境中執行的伺服器端服務,以及呼叫作業事件管理程式 API 的用戶端程式碼。Message Queue 4.2 根據 Tuxedo 作業事件管理程式提供程式設計範例。這些範例在每個平台上皆位於 ./C/tuxedo 目錄的程式範例目錄中。
此目錄包含 README 檔案,說明如何設定 Tuxedo 以使用 Message Queue 資源管理員,以及如何在 Tuxedo 環境中建立下列程式範例:
程式範例 |
說明 |
---|---|
jmsserver.c |
使用 Message Queue 實作傳送與接收訊息的 Tuxedo 服務。 |
jmsclient_sender.c |
在 jmsserver.c 程式中使用訊息產生服務的 Tuxedo 用戶端。 |
jmsclient_receiver.c |
在 jmsserver.c 程式中使用訊息接收服務的 Tuxedo 用戶端。 |
async_jmsserver.c |
使用 Message Queue 實作非同步使用訊息的 Tuxedo 服務。 |
jmsclient_async_receiver.c |
在 async_jmsserver.c 程式中使用非同步訊息使用服務的 Tuxedo 用戶端。 |
Message Queue 安裝程式已增強為可向 Sun Connection 註冊 Message Queue;Sun Connection 是協助您追蹤、管理及維護 Sun 軟硬體的 Sun 代管服務。
您可以在 Message Queue 安裝過程中,選擇是否要向 Sun Connection 註冊 Message Queue。已安裝之 Message Queue 的相關資訊 (如發行版本、主機名稱、作業系統、安裝日期及其他此類基本資訊) 會安全傳輸至 Sun Connection 資料庫。Sun Connection 資產管理服務可協助您管理 Sun 軟硬體,而更新服務則會通知您最新之可用安全性問題修正、建議更新及增強功能。
Message Queue 4.2 已增加有關 Sun Connection 註冊的下列安裝程式畫面:
必須已經有 Sun Online 帳號或建立一個帳號,才可進行註冊。若還沒有帳號,安裝程式會提供下列畫面,供您建立 Sun Online 帳號:
您可以在安裝期間使用上述畫面註冊 Message Queue;或等到完成安裝後,再以僅限註冊模式執行安裝程式,如下所示:
# installer -r
僅限註冊模式需要安裝 Message Queue 4.2,且僅會顯示與註冊相關的安裝程式畫面。
Message Queue 4.2 支援 MySQL 資料庫作為 JDBC 資料存放區。MySQL Cluster Edition 可用作獨立代理程式的 JDBC 資料庫,以及高可用性代理程式叢集所需之高度可用的共用資料存放區。如需有關配置 Message Queue 使用 MySQL 的資訊,請參閱「Sun Java System Message Queue 4.2 Administration Guide」中的「Configuring a JDBC-Based Data Store」,同時另請參閱「Sun Java System Message Queue 4.2 Administration Guide」中的「High-Availability Cluster Properties」。
Message Queue 4.1 是次級發行版本,包含數項新功能、一些增強功能,以及錯誤修正。本節說明 4.1 發行版本的新功能,並提供您可以使用的進一步參考資料:
如需有關 Message Queue 4.0 中推出之功能的資訊,請參閱Message Queue 4.0 的新功能。
Message Queue 4.1 推出高可用性代理程式叢集。與僅提供訊息傳送服務可用性 (若代理程式失敗,可使用其他代理程式提供訊息傳送服務) 的傳統代理程式叢集相較,高可用性代理程式叢集還提供資料可用性 (若代理程式失敗,其他代理程式可使用其永久性訊息與狀態資料以接管訊息傳送工作)。
Message Queue 4.1 中推出的高可用性實作使用共用之 JDBC 資料存放區:代理程式叢集中的每個代理程式不會各自擁有永久資料存放區,而是讓叢集中的所有代理程式共用相同的 JDBC 相容資料庫。若某個代理程式失敗,叢集中的其他代理程式會接管失敗代理程式的訊息路由與傳送。由此,容錯移轉代理程式即可使用共用資料存放區中的資料與狀態資訊。失敗之代理程式的訊息傳送用戶端會重新連線至容錯移轉代理程式,以提供不間斷的訊息傳送服務。
Message Queue 4.1 高可用性實作中所使用的共用 JDBC 存放區本身必須也具備高可用性。若沒有高度可用的資料庫,或者訊息傳送不中斷對您而言不重要,則可繼續使用傳統叢集,其提供不包含資料可用性的服務可用性。
若要配置 Message Queue 4.1 高可用性代理程式叢集,必須為叢集中的每個代理程式指定下列代理程式特性:
叢集成員身份特性可指定代理程式位於高可用性代理程式叢集、叢集的 ID 與叢集中的代理程式 ID。
高度可用的資料庫特性可指定永久性資料模型 (JDBC)、資料庫供應商的名稱與各供應商的配置特性。
失敗偵測與容錯移轉特性可指定如何偵測代理程式失敗,以及如何使用容錯移轉代理程式處理失敗。
若要使用高可用性代理程式叢集實作,必須執行下列作業:
安裝高可用性資料庫。
安裝 JDBC 驅動程式 .jar 檔案。
為高度可用的永久資料存放區建立資料庫模式。
為叢集中的每個代理程式設定高可用性特性。
啟動叢集中的每個代理程式。
如需有關高可用性代理程式叢集的概念性討論,以及其與傳統叢集之間的比較,請參閱「Sun Java System Message Queue 4.2 Technical Overview」中的第 4 章「Broker Clusters」。如需有關高可用性代理程式叢集的逐步說明及參考資訊,請參閱「Sun Java System Message Queue 4.2 Administration Guide」中的第 8 章「Managing Broker Clusters」和「Sun Java System Message Queue 4.2 Administration Guide」中的「Cluster Configuration Properties」。
若搭配 Message Queue 4.0 使用高度可用的資料庫,且想切換成高可用性代理程式叢集,可以使用資料庫管理者公用程式 (imqdbmgr) 轉換為共用的永久資料存放區。另請參閱代理程式叢集,以深入瞭解已知問題與限制。
除了檔案式與 LDAP 式內建認證機制之外,Message Queue 4.1 也推出 Java 認證與授權服務 (JAAS) 的支援,可讓您將外部認證機制外掛到代理程式,以認證 Message Queue 用戶端。
如需 JAAS 相容認證服務可用之代理程式資訊的說明,以及如何配置代理程式以使用此類服務的說明,請參閱「Sun Java System Message Queue 4.2 Administration Guide」中的「Using JAAS-Based Authentication」。
Message Queue 4.1 已將 JDBC 資料存放區變更為支援高可用性代理程式叢集。因此,JDBC 資料存放區的格式會升級至 410 版。350、370 與 400 版的格式會自動遷移至 410 版。
請注意,由於檔案式永久資料存放區的格式沒有任何變更,因此其格式會保持為 370 版。
Message Queue 4.1 環境配置檔案 imqenv.conf 中已增加特性 IMQ_DEFAULT_EXT_JARS。您可以設定此特性,以指定在啟動代理程式時,將外部 .jar 檔案的路徑名稱納入 CLASSPATH。若使用此特性指定外部 .jar 檔案的位置,則不再需要將這些檔案複製到 lib/ext 目錄。外部 .jar 檔案可參照 JDBC 驅動程式或 JAAS 登入模組。下列特性範例指定 JDBC 驅動程式的位置。
IMQ_DEFAULT_EXT_JARS=/opt/SUNWhadb4/lib/hadbjdbc4.jar:/opt/SUNWjavadb/derby.jar
Message Queue 4.1 推出 Sun Java Enterprise System (Java ES) Monitoring Framework 的支援,可使用共用圖形介面監視 Java ES 元件。此介面利用名為「Sun Java System Monitoring Console」的網路型主控台實作。管理員可使用 [主控台] 檢視效能統計、建立自動監視的規則,以及確認警報。若執行 Message Queue 的同時也執行其他 Java ES 元件,可能會發現使用單一介面管理所有元件比較方便。
如需有關使用 Java ES Monitoring Framework 監視 Message Queue 的資訊,請參閱 XREF。
在舊版中,只有處於 PREPARED 狀態的作業事件可以由管理員回復。換言之,若屬於分散式作業事件的階段作業未正常終止,作業事件將繼續處於管理員無法清除的狀態。您現在可以在 Message Queue 4.1 中,使用指令公用程式 (imqcmd) 清除 (回復) 下列狀態的作業事件:STARTED、FAILED、INCOMPLETE、COMPLETE 與 PREPARED。
指令公用程式提供其他資料作為部分 imqcmd query txn 輸出,可協助您判斷是否可回復特定作業事件 (特別是如果該作業事件不在 PREPARED 狀態時)。該公用程式提供啟動作業事件的連線 ID,並指定作業事件的建立時間。管理員可使用此資訊,決定是否需要回復作業事件。一般說來,管理員應避免提前回復作業事件。
在 Message Queue 4.1 中,C 用戶端 (例如 Java 用戶端) 現在可連線至固定代理程式連接埠,而不是由代理程式的連接埠對映器服務動態指定的連接埠。若嘗試通過防火牆,或是若基於某些其他原因需要略過連接埠對映器服務,固定連接埠連線會很有用。
若要配置固定連接埠連線,必須同時配置代理程式與 C 用戶端執行階段 (連線的兩端)。例如,若需要透過 ssljms 將用戶端連線至連接埠 1756,請執行下列作業:
在用戶端上,設定下列特性:
MQ_SERVICE_PORT_PROPERTY=1756
MQ_CONNECTION_TYPE_PROPERTY=SSL
在代理程式端上,如下所示設定 imq.serviceName.protocolType.port 特性:
imq.ssljms.tls.port=1756
MQ_SERVICE_PORT_PROPERTY 連線特性已向下相容至 Message Queue 3.7 Update 2。
Message Queue 4.0 是僅支援 Application Server 9 PE 的次級發行版本。它包含數項新功能、一些增強功能,以及錯誤修正。本節說明此發行版本的新功能:
4.0 版推出的其中一個變更雖然次要,但可能造成重大改變,亦即停用以指令行指定密碼的選項。因此,您必須如已停用的密碼選項中所述,將所有密碼儲存在檔案中,或在提示時輸入密碼。
Message Queue 4.0 中已增加符合 Java Management Extensions (JMX) 規格,且可用於配置與監視 Message Queue 代理程式的新 API。您可以使用此 API,從 Java 應用程式內以程式設計方式配置並監視代理程式功能。在 Message Queue 的舊版中,您只能從指令行管理公用程式或從 [管理主控台] 存取這些功能。
如需更多資訊,請參閱「Sun Java System Message Queue 4.2 Developer’s Guide for JMX Clients」。
Message Queue 4.0 推出對用戶端執行階段記錄連線與階段作業相關事件的支援。
如需有關用戶端執行階段記錄以及如何加以配置的資訊,請參閱「Java Dev Guide」的第 137 頁。
Message Queue 4.0 推出的事件通知 API,可讓用戶端執行階段通知應用程式有關連線狀態的變更。連線事件通知可讓 Message Queue 用戶端偵聽關閉事件與重新連線事件,並根據通知類型與連線狀態採取適當的動作。例如,當發生容錯移轉且用戶端重新連線至其他代理程式時,應用程式最好清除作業事件狀態,並進行新的作業事件。
如需有關連線事件以及如何建立事件偵聽程式的資訊,請參閱「Java Dev Guide」的第 96 頁。
在 Message Queue 4.0 中,指令公用程式 (imqcmd) 已增加新的子指令及數個指令選項,可讓管理員靜止代理程式、在指定間隔之後關閉代理程式、銷毀連線,或設定 Java 系統特性 (例如連線相關特性)。
靜止代理程式會使其進入無訊息狀態,允許在關閉或重新啟動代理程式之前清空訊息。您無法向靜止中的代理程式建立新連線。若要靜止代理程式,請如下輸入指令。
imqcmd quiesce bkr -b Wolfgang:1756
若要在指定間隔後關閉代理程式,請如下輸入指令。(時間間隔會指定代理程式關閉前的等候秒數)。
imqcmd shutdown bkr -b Hastings:1066 -time 90
若指定時間間隔,代理程式就會記錄一則訊息,指示何時將會關閉。例如,
Shutting down the broker in 29 seconds (29996 milliseconds) (在 29 秒後關閉代理程式,29996 毫秒)
當代理程式等候關閉時,其運作方式會有以下影響。
會繼續接受管理 JMS 連線。
不會接受任何新的 JMS 連線。
現有的 JMS 連線會繼續運作。
代理程式無法接管高可用性代理程式叢集中的任何其他代理程式。
imqcmd 公用程式不會封鎖,它會向代理程式傳送關閉請求並立即返回。
若要銷毀連線,請如下輸入指令。
imqcmd destroy cxn -n 2691475382197166336
使用指令 imqcmd list cxn 或 imqcmd query cxn 以取得連線 ID。
若要透過 imqcmd 設定系統特性,請使用新的 –D 選項。這在設定或置換 JMS 連線工廠特性或連線相關的 Java 系統特性時,會很有用。例如:
imqcmd list svc -secure -DimqSSLIsHostTrusted=true imqcmd list svc -secure -Djavax.net.ssl.trustStore=/tmp/mytruststore -Djavax.net.ssl.trustStorePassword=mytrustword
如需有關 imqcmd 指令語法的完整資訊,請參閱「Sun Java System Message Queue 4.2 Administration Guide」中的第 13 章「Command Line Reference」。
在 Message Queue 4.0 中,資料庫管理者公用程式 imqdbmgr 已新增 query 子指令。此子指令可用以顯示關於 JDBC 資料存放區的資訊,包含資料庫版本、資料庫使用者,以及是否已建立資料庫表格。
以下是該指令所顯示之資訊的範例。
imqdbmgr query |
[04/Oct/2005:15:30:20 PDT] Using plugged-in persistent store: version=400 brokerid=Mozart1756 database connection url=jdbc:oracle:thin:@Xhome:1521:mqdb database user=scott Running in standalone mode. Database tables have already been created. |
在 Message Queue 4.0 中,現在支援 Apache Derby 10.1.1 版作為 JDBC 資料存放區提供者。
Message Queue 4.0 已變更用於最佳化與支援未來增強功能的 JDBC 資料存放區。因此,JDBC 資料存放區的格式會升級至 400 版。請注意,在 Message Queue 4.0 中,檔案式資料存放區由於沒有任何變更,因此其版本會維持在 370。
Message Queue 4.0 增加了兩個新特性,可對置於停用訊息佇列中的所有訊息進行設定。
JMS_SUN_DMQ_PRODUCING_BROKER 表示產生訊息的代理程式。
JMS_SUN_DMQ_DEAD_BROKER 表示將訊息標記為停用的代理程式。
自 Message Queue 4.0 起,用戶端連線工廠特性 imqSSLIsHostTrusted 的預設值為 false。若應用程式相依於之前的預設值 true,即需要重新配置並將特性明確設定為 true。
當代理程式配置為使用自我簽署的憑證時,您可以選擇信任主機。此時,除了指定連線應使用基於 SSL 的連線服務 (使用 imqConnectionType 特性),還應該將 imqSSLIsHostTrusted 特性設定為 true。
例如,若要在代理程式使用自我簽署的憑證時安全地執行用戶端應用程式,請使用如下的指令。
java -DimqConnectionType=TLS -DimqSSLIsHostTrusted=true ClientAppName
若要在代理程式使用自我簽署的憑證時安全地使用指令公用程式 (imqcmd),請使用類似如下的指令 (用於列出連接器服務)。
imqcmd list svc -secure -DimqSSLIsHostTrusted=true