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

Java 整合 WebSphere MQ 實現文件分組接收:隊列管理、消息屬性解析與事務提交

     編輯:Java 相關知識

環境準備

  1. 安裝 WebSphere MQ 並啟動隊列管理器(如 MQSI_SAMPLE_QM)
  2. 創建本地隊列(Local Queue,如 LQ)
  3. 定義服務連接通道(Server Connection Channel,如 BridgeChannel)
  4. 引入 MQ Client JAR:com.ibm.mq.allclient.jar

核心流程

  1. 設置 MQEnvironment 連接屬性
  2. 連接隊列管理器 MQQueueManager
  3. 打開隊列 MQQueue(輸入模式)
  4. 配置 MQGetMessageOptions:同步點、等待、邏輯順序、組匹配
  5. 循環 queue.get(message, gmo) 接收分組消息
  6. 首條消息提取文件名屬性,創建 FileOutputStream
  7. 寫入消息體,檢測 MQGS_LAST_MSG_IN_GROUP 結束
  8. 提交事務 qmgr.commit(),異常回滾 qmgr.backout()

關鍵代碼片段

// 初始化連接
MQEnvironment.hostname = host;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
MQQueueManager qmgr = new MQQueueManager(qmgrName);
int openOpts = MQOO_INPUT_AS_Q_DEF | MQOO_FAIL_IF_QUIESCING;
MQQueue inQueue = qmgr.accessQueue(queueName, openOpts, null, null, null);

// 獲取選項配置
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQGMO_FAIL_IF_QUIESCING | MQGMO_SYNCPOINT | MQGMO_WAIT;
gmo.waitInterval = 5000;
gmo.options |= MQGMO_ALL_MSGS_AVAILABLE | MQGMO_LOGICAL_ORDER;
gmo.matchOptions = MQMO_MATCH_GROUP_ID;

// 接收循環
MQMessage msg = new MQMessage();
FileOutputStream fos = null;
while (true) {
    inQueue.get(msg, gmo);
    if (fos == null) {
        String fileName = msg.getStringProperty("fileName");
        fos = new FileOutputStream(fileDir + rename(fileName));
    }
    byte[] buffer = new byte[msg.getMessageLength()];
    msg.readFully(buffer);
    fos.write(buffer);
    if (gmo.groupStatus == MQGS_LAST_MSG_IN_GROUP) break;
    msg.clearMessage();
}
fos.close();
qmgr.commit();

異常處理與資源釋放

  • MQException 捕獲後調用 backout() 回滾事務
  • finally 中關閉 FileOutputStream、MQQueue、MQQueueManager
  • 配置屬性外部化(MQConfig 讀取 properties 文件)

擴展建議

  • 接收完成後觸發 Shell 腳本處理文件(解壓、解析、入庫)
  • 集成 Spring JMS 簡化配置與異常處理
  • 監控隊列深度、消息積壓告警
  • 支持多實例併發消費(配置 MQOO_INPUT_SHARED)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved