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

Spring 系列第 4 彈:Spring JMS + WebSphere MQ 5.3 訊息處理 1-2-3 步走

     編輯:Java 相關知識

前言:Spring 簡化 JMS,MQ 保障可靠傳遞

Spring JMS 抽象框架簡化 JMS API,與 IBM WebSphere MQ 5.3 無縫整合。本文以點對點 (P2P) 系統為例,示範發送/接收簡單文本訊息。需下載源碼、Spring 框架、WebSphere MQ 5.3、Apache Ant。

Spring JMS 核心套件速覽

  • org.springframework.jms.core:核心功能,JmsTemplate 處理資源建立/釋放,提供發送/同步接收/暴露 Session/Producer 回調
  • org.springframework.jms.support:JMSException 轉非檢查異常層級
  • org.springframework.jms.support.converter:MessageConverter Java 物件 ⇄ JMS 訊息
  • org.springframework.jms.support.destination:JNDI 目標服務定位器等策略
  • org.springframework.jms.connection:獨立應用適用的 ConnectionFactory、JMS 專用 PlatformTransactionManager

WebSphere MQ 關鍵特性

  • 隊列 + 事務工具保障跨網路訊息完整性
  • 全平台一致 API,支援 JMS 含發布-訂閱
  • 基於 Eclipse 的 MQ Explorer 遠程管理整個網路,可擴展

JmsTemplate 兩種實作

  • JmsTemplate:JMS 1.1 API
  • JmsTemplate102:JMS 1.0.2 API (本文採用)

回調機制協調訊息傳遞:MessageCreator (建訊息)、SessionCallback (給 Session)、ProducerCallback (給 Session+Producer)。

Spring 配置:從 JNDI 串起 MQ

1. JMS 模板 (spring-mqseries-jms.xml):

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate102">
  <property name="connectionFactory"><ref bean="jmsQueueConnectionFactory"/></property>
  <property name="destinationResolver"><ref bean="jmsDestinationResolver"/></property>
  <property name="pubSubDomain"><value>false</value></property> <!-- P2P -->
  <property name="receiveTimeout"><value>20000</value></property>
</bean>

2. 連線工廠從 JNDI 取得:

<bean id="internalJmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate"><ref bean="jndiTemplate"/></property>
  <property name="jndiName"><value>MQ_JMS_MANAGER</value></property>
</bean>

3. JNDI Template 設定 (檔案系統 FSContext):

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
    <props>
      <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
      <prop key="java.naming.provider.url">file:/C:/JNDI-Directory</prop>
    </props>
  </property>
</bean>

4. 綁定到應用 Bean:

<bean id="jmsSender" class="springexample.client.JMSSender">
  <property name="jmsTemplate102"><ref bean="jmsQueueTemplate"/></property>
</bean>
<bean id="jmsReceiver" class="springexample.client.JMSReceiver">
  <property name="jmsTemplate102"><ref bean="jmsQueueTemplate"/></property>
</bean>

應用代碼:極簡發送與接收

發送端 JMSSender

public void sendMesage() {
  jmsTemplate102.send("JMS_RequestResponseQueue",
    new MessageCreator() {
      public Message createMessage(Session session) throws JMSException {
        return session.createTextMessage("This is a sample message");
      }
    });
}

send(隊列名, MessageCreator),Session 由模板提供,建立 TextMessage。

接收端 JMSReceiver

public void processMessage() {
  Message msg = jmsTemplate102.receive("JMS_RequestResponseQueue");
  try {
    TextMessage tm = (TextMessage) msg;
    if (msg != null) System.out.println("Message Received -->" + tm.getText());
  } catch (Exception e) { e.printStackTrace(); }
}

同步 receive(隊列名),等待時間由模板 receiveTimeout 控制。

WebSphere MQ 隊列與 JNDI 綁定實操

  1. 下載源碼附批次檔,解壓到 C:\
  2. 執行 mqsetup.bat (需 PATH 含 MQ bin) → 建立 QueueManager MQJMS.QManager、Queue RequestResponseQueue (MQ Explorer 可視化確認,圖 1、2)
  3. 設定 PATH/CLASSPATH 含 MQ Java lib/bin,或跑 classpath.cmd
  4. 修改 JMSAdmin.config:啟用 RefFSContextFactory + file:/C:/JNDI-Directory
  5. 建立 C:/JNDI-Directory,跑 JMSAdmin 批次檔輸入:
    def qcf(MQ_JMS_MANAGER) qmgr(MQJMS.QManager)
    def q(JMS_RequestResponseQueue) qmgr(MQJMS.QManager) queue(RequestResponseQueue)

圖 1:QueueManager 配置

圖 2:Request/Response 隊列

運行驗證

  1. 下載 Spring 框架解壓 (如 c:\spring-framework-1.2-rc2)
  2. 源碼解壓 c:\SpringSeriesPart4JMS,複製 spring.jar、commons-logging.jar、MQ 所有 jar 到專案 lib
  3. ant -f build-jmssender.xml → 編譯運行 SendMQSpringJMS,裝載 Spring 配置、取得 jmsSender Bean、發送訊息
  4. ant -f build-jmsreceiver.xml → 編譯運行 ReceiveMQSpringJMS,控制台輸出:
    Message Received --> This is a sample message.

結語

Spring JMS 模板讓 MQ 訊息收發化繁為簡:配置 JNDI 連線工廠/目標解析器 → 注入 JmsTemplate → 回調發送/同步接收。雖示例簡單,步驟可擴展至複雜企業應用。Spring 系列至此完結,更多細節請參考官方文檔。

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