JBoss企業級應用服務平臺羣集指南(八)

1.6 集羣的JMS服務

    JBoss AS 3.2.4 和更高的版本支持高可用性的 all 服務器配置裏的 JMSHA-JMS)服務。在 JBoss AS 當前的發佈版本里,HA-JMS 服務用一個羣集的 singleton fail-over 服務來實現。
注意
    如果你希望自己來配置 HA-JMS,你可以在以前的 JBoss AS 版本里讓它運行。我們有一個客戶成功地在 JBoss AS 3.0.7 裏使用 HA-JMS。如果你有更多問題的話,請聯繫 JBoss 支持部門。
 

1.6.1      高可用性的Singleton Fail-over

    JBoss HA-JMS 服務(也就是消息隊列和主題)任何給定時間都只在羣集裏的單節點運行(主節點)。如果這個節點崩潰了,羣集系統簡單地選取另外一節點來運行 JMS 服務(fail-over)。這種設置提供了針對服務器癱瘓的冗餘措施,但並沒有降低 JMS 服務器節點的負載。
注意
    雖然你不能夠對 HA-JMS 隊列進行負載平衡(只有一個運行這個隊列的主節點),但是你可以平衡處理隊列裏信息的 MDBs 的負載(參考章節 6.1.3, “負載均衡的HA-JMS MDBs”).
 

1.6.1.1        服務器端配置

    爲了使用 singleton fail-over HA-JMS 服務,你必須在羣集裏的所有節點上配置相同的 JMS 服務。這包括所有和 JMS 相關的 MBeans 以及部署的 JMS 應用程序。
    JMS 服務器被設置成在 DefaultDS 裏持久化它的數據。在缺省的情況下,那就是內含的 HSQLDB。然而,在大部分羣集環境裏,所有節點都需要把數據持久化到一個共享數據庫裏。因此,在你啓動羣集 JMS 之前要做的第一件事就是建立一個共享數據庫。你需要做如下的事情:
  配置DefaultDS來指向你選擇的數據庫服務器。就是用docs/examples/jca 目錄下的xxx-ds.xml文件代替deploy/hsqlsb-ds.xml文件,其中xxx是目標共享數據庫的名字(例如,mysql-ds.xml )。
server/all/deploy-hasingleton/jms 目錄下的hsqldb-jdbc2-service.xml文件用特定數據庫的文件代替。例如,MySQL 的文件就是mysql-jdbc2-service.xmlJBoss AS 發行版本捆綁了一些 RDBMS 的配置文件。它們可以在docs/examples/jms下找到。
注意
    你不需要替換server/all/deploy-hasingleton/jms 目錄下的hsqldb-jdbc-state-service.xml 文件。儘管它的名字裏包含 hsql,它適用於所有兼容 SQL92 的數據庫,包括 HSQL,MySQL,SQL Server 和更多數據庫。象我們上面配置的那樣,它自動使用 DefaultDS 來存放數據。
雖然你不能夠對 HA-JMS 隊列進行負載平衡(只有一個運行這個隊列的主節點),但是你可以平衡處理隊列裏信息的 MDBs 的負載(參考章節 6.1.3, “負載均衡的HA-JMS MDBs”).
 

1.6.1.2        HA-JMS客戶端

    客戶和常規的 JMS 客戶在兩個方面有所不同。.
  The HA-JMS 客戶必須獲得 HA-JNDI 裏的 JMS connection factories(缺省端口是1100)。
  客戶連接必須監控服務器異常(exceptions)。當羣集系統 fail-over 到另外一個主節點時,所有在當前連接上的的客戶端操作都會失敗併產生異常(exceptions)。客戶端必須知道該重新連接。
注意
   雖然 HA-JMS 連接工廠(connection factory)知道運行 JMS 服務的當前主節點,但並不存在智能的客戶端攔截器(client side interceptor)。客戶端 stub 只知道固定的主節點,它不能夠依服務器拓撲結構的變化而調整。

1.6.1.3        負載平衡的HA-JMS MDBs

    雖然 HA-JMS 隊列(queues)和主題(topics)在同一時間只在單節點上運行,但其他節點上的 MDBs 也能夠接收和處理 HA-JMS 主節點上的信息。這種競爭的情況導致 MDBs 的平衡負載行爲。爲了啓用 MDBs 的平衡負載,你可以指定隊列的 receiver。這個 receiver 記錄哪個節點正在等待信息和信息該按什麼樣的順序來處理。JBoss 提供三個 receiver 的實現(implementations)。
  The org.jboss.mq.server.ReceiversImpl HashSet 的缺省實現(implementation)。
  The org.jboss.mq.server.ReceiversImplArrayList ArrayList 的實現。
  The org.jboss.mq.server.ReceiversImplLinkedList LinkedList 的實現。
    你可以指定 receiver 實現的類名作爲在每個節點上定義永久 JMS Queue DestinationManager MBean 的一個屬性。爲了獲得最好的負載平衡性能,我們建議你使用 ReceiversImplArrayList ReceiversImplArrayList 實現,因爲 JVM 裏的 HashSet 的實現不是很好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章