首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

在JBoss集群中構建高可用JMS集群服務完整指南

     編輯:Java 相關知識

JMS集群通過消息負載均衡與故障轉移提升系統並發處理能力。本文詳述基於JBoss 4.x的三步配置流程:數據庫持久化、分佈式JNDI、JMS集群化,並包含消息驅動Bean集群部署實戰。

第一步:配置消息持久化數據庫

JBoss 3.2+僅支持數據庫持久化(官方稱文件模式不可靠)。以Oracle 9.2為例:

  1. 複製doc/examples/jca/oracle-ds.xml至server/all/farm,修改連接參數
  2. 集群啟動時farm服務自動同步部署到所有節點
  3. 假設JNDI名為GlobalDS

複製doc/examples/jms/oracle-jdbc3-service.xml至server/all/deploy-hasingleton/jms,刪除hsqldb-jdbc2-service.xml,修改oracle-jdbc3-service.xml第56行:

<attribute name="DataSource">GlobalDS</attribute>

啟動run -c all後,Oracle將自動建立三張表:

  • JMS_MESSAGE_LOG:點對點消息(MessageID, Destination, TXID, TXOP, MessageBlob)
  • JMS_REFERENCE_LOG:Topic消息(含Redelivered標記)
  • JMS_TRANSACTION_LOG:事務日誌

第二步:配置分佈式JNDI環境

JBoss集群JNDI採用分佈式Singleton模式:

  • 所有節點開啟1100端口作為全局JNDI入口
  • 首啟動節點為Master,持有完整全局綁定
  • 客戶端查詢流程:全局JNDI → 未命中則順序詢問各節點本地JNDI
  • Master宕機時,備節點自動升級為新Master

為防單點丟失Queue綁定,建議每個節點的server/all/deploy-hasingleton/jms/JBossmq-destinations-service.xml均添加:

<mbean code="org.jboss.mq.server.jmx.Queue"
       name="jboss.mq.destination:service=Queue,name=test">
  <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>

第三步:啟用JMS集群與MDB部署

默認配置不支持MDB集群,需:

  1. 下載擴展jar,重命名為cdot-jbossx.jar放入server/all/deploy/jms
  2. 編寫MDB接收test隊列消息:
public class TestJmsBean implements MessageDrivenBean, MessageListener {
    public void ejbCreate() { System.out.println("MDB創建"); }
    public void ejbRemove() {}
    public void onMessage(Message msg) {
        try { System.out.println("收到消息: " + msg.getJMSMessageID()); }
        catch (Exception e) { e.printStackTrace(); }
    }
    public void setMessageDrivenContext(MessageDrivenContext ctx) { this.ctx = ctx; }
}
  1. 打包部署,集群中任意節點接收消息均可觸發MDB,實現負載分發

關鍵注意點

  • 文件持久化雖快2倍但生產環境禁用
  • 分佈式JNDI依賴1100端口互通,防火牆需放行
  • deploy-hasingleton目錄確保服務僅在Master節點啟動,避免重複消費
  • MDB集群需額外jar包,官方文檔常被忽略

完成上述配置後,即擁有具備消息持久化、負載均衡、故障轉移能力的企業級JMS集群。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved