Sun Java System Application Server 9.1 部署規劃指南

規劃 Message Queue 代理程式部署

Java Message Service (JMS) API 是一種允許 J2EE 應用程式和元件建立、傳送、接收以及讀取郵件的訊息傳送標準。它可啟用可靠的非同步鬆耦合分散式通訊。實作 JMS 的 Sun Java System Message Queue 與 Application Server 整合在一起,可讓您建立諸如訊息驅動 Bean (MDB) 之類的元件。

Sun Java System Message Queue (MQ) 使用由 J2EE 連接器架構規格 (JCA) 1.5 定義的連接器模組 (亦稱為資源配接卡) 與 Application Server 整合在一起。連接器模組是增加 Application Server 功能的標準化方式。部署至 Application Server 的 J2EE 元件使用透過連接器模組整合的 JMS 提供者,交換 JMS 訊息。依預設,JMS 提供者是 Sun Java System Message Queue,但是如果需要使用不同的 JMS 提供者,則只要是實作 JCA 1.5 的提供者皆可。

在 Application Server 中建立 JMS 資源會在背景中建立連接器資源。因此,每個 JMS 作業均會在背景中呼叫連接器執行階段並使用 MQ 資源介面。

除了使用資源配接卡 API 之外,Application Server 還使用其他 MQ API 提供與 MQ 的更佳整合。此緊密的整合可啟用連接器容錯移轉、外送連線的負載平衡,以及內送訊息至 MDB 的負載平衡等功能。這些功能可讓您使訊息傳送流量容錯且高度可用。

多個代理程式叢集

MQ Enterprise Edition 支援使用多個互連的代理程式實例,稱為代理程式叢集。對於代理程式叢集,用戶端連線會分散至叢集中的所有代理程式。叢集可提供水平可延伸性並可提高可用性。

單一訊息代理程式可延伸至約八個 CPU,並為一般應用程式提供足夠的流量。若代理程式程序故障,則會自動重新啟動。但是,隨著連線至代理程式的用戶端數目增加,以及提供的訊息數目增加,代理程式終會超過檔案描述元的數目與記憶體等限制。

在叢集中有多個代理程式而非只有一個代理程式,可讓您:

但是,具有多個代理程式並不保證代理程式故障時,進行中的作業事件會繼續在替代代理程式上執行。當 MQ 使用叢集中不同的代理程式重新建立故障的連線時,會失去作業事件訊息傳送並回復進行中的作業事件。除了無法完成作業事件之外,使用者應用程式將不會受到影響。由於可繼續使用連線,因此確認了服務容錯移轉功能。

因此,MQ 不支援在叢集中的高可用持續性訊息傳送。若代理程式在故障後重新啟動,則將自動回復並完成持續性訊息的傳遞。持續性訊息可儲存在資料庫中或儲存於檔案系統上。但是,若代管代理程式的機器未從硬體故障中回復,則可能遺失訊息。

內含適用於 Sun Message Queue 之 Sun Cluster Data Service 的 Solaris 平台,支援不需設定即可針對持續性訊息進行容錯移轉。此配置運用 Sun Cluster 的全域檔案系統及 IP 容錯移轉,提供實在的高可用性並隨附於 Java Enterprise System 中。

主代理程式與用戶端同步化

在多個代理程式配置中,每個目標會在叢集中所有代理程式上遭到複製。每個代理程式知道在所有其他代理程式上的目標註冊之訊息用戶。因此,每個代理程式可從其自己的直接連線訊息生產者,將訊息路由至遠端的訊息用戶,並從遠端生產者將訊息傳遞至自己的直接連線用戶。

在叢集配置中,每個訊息生產者直接連線的代理程式會為該生產者傳送的訊息執行路由。由此,持續性訊息會再透過訊息的主代理程式進行儲存與路由。

當管理員建立或銷毀代理程式上的目標時,此資訊會自動傳播至叢集中的所有其他代理程式。同理,當訊息用戶向主代理程式註冊,或從其主代理程式中斷連線時 (明確指定、由於用戶端或網路故障,或由於其主代理程式關閉),有關此用戶的資訊會在整個叢集中傳播。有關長期訂閱的資訊也會以類似的方式傳播至叢集中的所有代理程式。

配置 Application Server 以使用 Message Queue 代理程式

Application Server 的 Java 訊息服務表示 Message Queue 的連接器模組 (資源配接卡)。您可以透過管理主控台或 asadmin 指令行公用程式來管理 Java 訊息服務。

MQ 代理程式 (JMS 主機) 會在與 Application Server 程序不同的 JVM 中執行。如此可讓多個應用程式伺服器實例或叢集共用同一組 MQ 代理程式。

在 Application Server 中,JMS 主機是指 MQ 代理程式。Application Server 的 Java 訊息服務配置內含 JMS 主機清單 (亦稱為 AddressList),其中包括所有即將使用的 JMS 主機。

使用管理主控台管理 JMS

在管理主控台中,您可以使用 Java 訊息服務節點為特定的配置設定 JMS 特性。您可以設定 [重新連線間隔] 與 [重新連線嘗試] 等特性。如需更多資訊,請參閱「Sun Java System Application Server 9.1 管理指南」中的第 4 章「配置 Java 訊息服務資源」

Java 訊息服務節點下的 JMS 主機節點包含 JMS 主機的清單。您可以在清單中增加及移除主機。對於每個主機,您可以設定主機名稱、連接埠號碼,以及管理使用者名稱與密碼。依預設,JMS 主機清單包含一個稱為 default_JMS_host 的 MQ 代理程式,其表示與 Application Server 整合的本機 MQ 代理程式。

配置 JMS 主機清單以納入叢集中所有的 MQ 代理程式。例如,若要設定包含三個 MQ 代理程式的叢集,請在 Java 訊息服務內為每個代理程式增加一個 JMS 主機。Message Queue 用戶端使用 Java 訊息服務中的配置資訊,與 MQ 代理程式通訊。

使用 asadmin 管理 JMS

除了管理主控台,還可以使用 asadmin 指令行公用程式管理 Java 訊息服務與 JMS 主機。使用下列 asadmin 指令:

Java 訊息服務類型

Application Server 與 MQ 代理程式之間的整合有兩種類型:LOCAL 與 REMOTE。您可以在管理主控台的 Java 訊息服務頁面上設定此 Type 屬性。

LOCAL Java 訊息服務

如果 Type 屬性是 LOCAL,Application Server 會啟動與停止 MQ 代理程式。當 Application Server 啟動時,會隨即啟動指定為預設 JMS 主機的 MQ 代理程式。同理,當應用程式伺服器實例關閉時,會隨即關閉 MQ 代理程式。LOCAL 類型最適合於獨立的應用程式伺服器實例。

對於 LOCAL 類型,請使用 Start Arguments 屬性指定 MQ 代理程式的啟動參數。

REMOTE Java 訊息服務

如果 Type 屬性是 REMOTE,Application Server 會使用外部配置的代理程式或代理程式叢集。在此情況下,您必須從 Application Server 分別啟動與停止 MQ 代理程式,並使用 MQ 工具配置與調校代理程式或代理程式叢集。REMOTE 類型最適合於應用程式伺服器叢集。

對於 REMOTE 類型,您必須使用 MQ 工具指定 MQ 代理程式啟動參數。可忽略 Start Arguments 屬性。

預設 JMS 主機

您可以在管理主控台的 Java 訊息服務頁面上指定預設 JMS 主機。若 Java 訊息服務的類型為 LOCAL,則 Application Server 會在應用程式伺服器實例啟動時啟動預設的 JMS 主機。

若要使用 MQ 代理程式叢集,請刪除預設的 JMS 主機,然後增加叢集中的所有 MQ 代理程式作為 JMS 主機。在此情況下,預設 JMS 主機會成為 JMS 主機清單中的第一個 JMS 主機。

您也可以明確地將預設 JMS 主機設定為其中一個 JMS 主機。當 Application Server 使用 Message Queue 叢集時,預設 JMS 主機會執行 MQ 專屬的指令。例如,為 MQ 代理程式叢集建立實體目標時,預設 JMS 主機會執行指令以建立實體目標,但叢集中的所有代理程式會使用實體目標。

部署方案範例

若要符合您的訊息傳送需求,請修改 Java 訊息服務與 JMS 主機清單,以滿足您的部署、效能與可用性需求。以下各節說明一些典型的方案。

為取得最佳的可用性,若訊息傳送需求不單只是為了 Application Server,請在不同的機器上部署 MQ 代理程式與 Application Server。或在每部機器上執行一個應用程式伺服器實例與一個 MQ 代理程式實例,直到訊息傳送能力足夠為止。

預設部署

自動安裝 Application Server 會建立 Domain Administration Server (DAS)。依預設,DAS 的 Java 訊息服務類型是 LOCAL。因此,啟動 DAS 也會啟動其預設 MQ 代理程式。

建立新的網域也會建立新的代理程式。依預設,當您將獨立的伺服器實例或叢集增加至網域時,其 Java 訊息服務會配置為 REMOTE,而其預設 JMS 主機會是 DAS 所啟動的代理程式。

預設部署說明使用包含三個實例的應用程式伺服器叢集之預設部署範例。

搭配使用 MQ 代理程式叢集與應用程式伺服器叢集

若要配置應用程式伺服器叢集使用 MQ 代理程式叢集,請增加所有 MQ 代理程式作為 Application Server 的 Java 訊息服務中之 JMS 主機。所有建立的 JMS 連線工廠及部署的 MDB 會接著使用指定的 JMS 配置。

下圖描述的部署範例,在代理程式叢集中包含三個 MQ 代理程式,並在叢集中包含三個應用程式伺服器實例。

指定特定應用程式的 MQ 代理程式叢集

在某些情況下,應用程式使用的 MQ 代理程式叢集,可能必須與應用程式伺服器叢集使用的不同。指定特定應用程式的 MQ 代理程式叢集說明此類方案的範例。若要執行此作業,請使用 JMS 連線工廠的 AddressList 特性或 MDB 部署描述元中的 activation-config 元素,指定 MQ 代理程式叢集。

如需有關配置連線工廠的更多資訊,請參閱「Sun Java System Application Server 9.1 管理指南」中的「JMS 連線工廠」。如需有關 MDB 的更多資訊,請參閱「Sun Java System Application Server 9.1 Developer’s Guide」中的「Using Message-Driven Beans」

應用程式用戶端

當應用程式用戶端或獨立應用程式第一次存取 JMS 管理式物件時,用戶端 JVM 會從伺服器擷取 Java 訊息服務配置。用戶端 JVM 必須重新啟動,才可使用對於 JMS 服務所做的進一步變更。