打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring 整合 ibm mq

1.引入ibm mq 依赖

由于ibm mq依赖的jar包不在maven的中央仓库,如果要在pom.xml中依赖,需要先将jar安装进本地仓库或者私服

打开cmd,cd到mq_installdir/Java/lib下,执行下列命令

  1. mvn install:install-file -Dfile=com.ibm.mq.defaultconfig.jar -DgroupId=com.ibm.mq -DartifactId=defaultconfig -Dversion=7.5.0.1 -Dpackaging=jar  
  2.   
  3. mvn install:install-file -Dfile=com.ibm.mq.commonservices.jar -DgroupId=com.ibm.mq -DartifactId=commonservices -Dversion=7.5.0.1 -Dpackaging=jar  
  4.   
  5. mvn install:install-file -Dfile=com.ibm.mqjms.jar -DgroupId=com.ibm -DartifactId=mqjms -Dversion=7.5.0.1 -Dpackaging=jar  
  6.   
  7. mvn install:install-file -Dfile=jms.jar -DgroupId=com.ibm.mq -DartifactId=jms -Dversion=7.5.0.1 -Dpackaging=jar  
  8.   
  9. mvn install:install-file -Dfile=com.ibm.mq.headers.jar -DgroupId=com.ibm.mq -DartifactId=headers -Dversion=7.5.0.1 -Dpackaging=jar  
  10.   
  11. mvn install:install-file -Dfile=com.ibm.mq.jar -DgroupId=com.ibm -DartifactId=mq -Dversion=7.5.0.1 -Dpackaging=jar  
  12.   
  13. mvn install:install-file -Dfile=com.ibm.mq.jmqi.jar -DgroupId=com.ibm.mq -DartifactId=jmqi -Dversion=7.5.0.1 -Dpackaging=jar  
  14.   
  15. mvn install:install-file -Dfile=com.ibm.mq.pcf.jar -DgroupId=com.ibm.mq -DartifactId=pcf -Dversion=7.5.0.1 -Dpackaging=jar  
  16.   
  17. mvn install:install-file -Dfile=com.ibm.mq.postcard.jar -DgroupId=com.ibm.mq -DartifactId=postcard -Dversion=7.5.0.1 -Dpackaging=jar  
  18.   
  19. mvn install:install-file -Dfile=com.ibm.mq.soap.jar -DgroupId=com.ibm.mq -DartifactId=soap -Dversion=7.5.0.1 -Dpackaging=jar  
  20.   
  21. mvn install:install-file -Dfile=com.ibm.mq.tools.ras.jar -DgroupId=com.ibm.mq.tools -DartifactId=ras -Dversion=7.5.0.1 -Dpackaging=jar  
  22.   
  23. mvn install:install-file -Dfile=jms.jar -DgroupId=com.ibm.mq -DartifactId=jms -Dversion=7.5.0.1 -Dpackaging=jar  
  24.   
  25. mvn install:install-file -Dfile=dhbcore.jar -DgroupId=com.ibm.mq -DartifactId=dhbcore -Dversion=7.5.0.1 -Dpackaging=jar  
以上命令是在本地仓库安装相应的jar包

安装完成后在pom.xml中引用依赖

  1. <dependency>  
  2.             <groupId>com.ibm.mq</groupId>  
  3.             <artifactId>jmqi</artifactId>  
  4.             <version>${ibm.mq.version}</version>  
  5.         </dependency>  
  6.         <dependency>  
  7.             <groupId>com.ibm.mq</groupId>  
  8.             <artifactId>headers</artifactId>  
  9.             <version>${ibm.mq.version}</version>  
  10.         </dependency>  
  11.         <dependency>  
  12.             <groupId>com.ibm</groupId>  
  13.             <artifactId>mq</artifactId>  
  14.             <version>${ibm.mq.version}</version>  
  15.         </dependency>  
  16.         <dependency>  
  17.             <groupId>com.ibm.mq</groupId>  
  18.             <artifactId>jms</artifactId>  
  19.             <version>${ibm.mq.version}</version>  
  20.         </dependency>  
  21.         <dependency>  
  22.             <groupId>com.ibm.mq</groupId>  
  23.             <artifactId>dhbcore</artifactId>  
  24.             <version>${ibm.mq.version}</version>  
  25.         </dependency>  
  26.         <dependency>  
  27.             <groupId>com.ibm</groupId>  
  28.             <artifactId>mqjms</artifactId>  
  29.             <version>${ibm.mq.version}</version>  
  30.         </dependency>  
  31.         <dependency>  
  32.             <groupId>com.ibm.mq</groupId>  
  33.             <artifactId>connector</artifactId>  
  34.             <version>${ibm.mq.version}</version>  
  35.         </dependency>  
  36.         <dependency>  
  37.             <groupId>org.springframework</groupId>  
  38.             <artifactId>spring-jms</artifactId>  
  39.             <version>${org.springframework.version}</version>  
  40.         </dependency>  
2.配置applicationContext-ibmmq.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  6.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">  
  7.     <description>MQ</description>  
  8.     <!-- 加载mq属性配置文件 -->  
  9.     <context:property-placeholder location="classpath*:/mqconnect.properties" />  
  10.     <!-- mq队列连接工厂 -->  
  11.     <bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">  
  12.         <property name="transportType" value="${app.mq.transportType}"/>  
  13.         <property name="queueManager" value="${queue.manager}"/>  
  14.         <property name="hostName" value="${queue.manager.host}"/>  
  15.         <property name="port" value="${app.mq.port}"/>  
  16.         <property name="channel" value="${app.mq.channel}"/>  
  17.     </bean>    
  18.     <!-- spring缓存管理mq队列连接工厂 -->  
  19.     <bean id="jmsQueueConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">  
  20.         <property name="targetConnectionFactory" ref="jmsConnectionFactory" />  
  21.         <property name="sessionCacheSize">  
  22.             <value>5</value>  
  23.         </property>  
  24.     </bean>  
  25.       
  26.      <!-- MQ sender queue setup -->    
  27.     <bean id="senderQueue" class="com.ibm.mq.jms.MQQueue">   
  28.         <property name="baseQueueManagerName" value="${queue.manager}"/>   
  29.         <property name="baseQueueName" value="${queue.name}"/>   
  30.     </bean>  
  31.     <!-- MQ receiver queue setup -->    
  32.     <bean id="receiverQueue" class="com.ibm.mq.jms.MQQueue">   
  33.         <property name="baseQueueManagerName" value="${queue.manager}"/>   
  34.         <property name="baseQueueName" value="${queue.name}"/>   
  35.     </bean>  
  36.       
  37.     <!-- the JMSTemplate setup for Sender Queue-->   
  38.     <bean id="SenderJMSTemplate" class="org.springframework.jms.core.JmsTemplate">    
  39.         <property name="connectionFactory" ref="jmsQueueConnectionFactory"/>  
  40.         <property name="defaultDestination" ref="senderQueue"/>  
  41.         <property name="pubSubDomain" value="false"/>  
  42.     </bean>  
  43.       
  44.     <!-- the JMSTemplate setup for Receiver Queue -->    
  45.     <bean id="ReceiverJMSTemplate" class="org.springframework.jms.core.JmsTemplate">    
  46.         <property name="connectionFactory" ref="jmsQueueConnectionFactory"/>  
  47.         <property name="defaultDestination" ref="receiverQueue"/>   
  48.         <property name="pubSubDomain" value="false"/>   
  49.     </bean>   
  50.      <!-- 队列发送程序 -->  
  51.     <bean id="jmsSender" class="com.watson.jms.JMSSender">    
  52.         <property name="jmsTemplate" ref="SenderJMSTemplate" />    
  53.         <property name="replyTo" ref="senderQueue" />  
  54.     </bean>  
  55.     <!-- 队列接收程序 -->  
  56.     <bean id="jmsReceiver" class="com.watson.jms.JMSReceiver">    
  57.         <property name="jmsTemplate" ref="ReceiverJMSTemplate"/>  
  58.         <property name="receiveQueue" ref="receiverQueue"/>  
  59.     </bean>   
  60.       
  61.     <!-- spring 监听队列,一旦队列中有消息,马上触发监听 -->  
  62.     <bean id="jmsContainer"  
  63.         class="org.springframework.jms.listener.DefaultMessageListenerContainer">    
  64.         <property name="connectionFactory" ref="jmsQueueConnectionFactory" />    
  65.         <property name="destination" ref="receiverQueue" />    
  66.         <property name="messageListener" ref="jmsReceiver" />    
  67.         <property name="concurrentConsumers" value="1" />   
  68.     </bean>  
  69.       
  70. </beans>  

3.mq属性配置文件mqconnect.properties

  1. #192.168.5.105  
  2. #queue.manager.host=192.168.5.105  
  3. #app.mq.port=2414  
  4. #queue.manager=IB9QMGR  
  5. #app.mq.channel=SERVER2015  
  6. #app.mq.transportType=1  
  7. #queue.name=ORDER.QUEUE  
  8.   
  9. #localhost  
  10. queue.manager.host=127.0.0.1  
  11. app.mq.port=2414  
  12. queue.manager=IB9QMGR  
  13. app.mq.channel=SYSTEM.DEF.SVRCONN  
  14. app.mq.transportType=1  
  15. queue.name=jms.test  
4.消息发送程序JMSSender.java

  1. package com.watson.jms;  
  2.   
  3.   
  4. import java.util.Properties;  
  5.   
  6. import javax.jms.Destination;  
  7.   
  8. import org.springframework.jms.core.JmsTemplate;  
  9. import com.alibaba.fastjson.JSONObject;  
  10.   
  11. public class JMSSender {  
  12.   
  13.     private JmsTemplate jmsTemplate;  
  14.   
  15.     private Properties msgheader;  
  16.   
  17.     private Destination replyTo;  
  18.   
  19.     public JmsTemplate getJmsTemplate() {  
  20.         return jmsTemplate;  
  21.     }  
  22.   
  23.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  24.         this.jmsTemplate = jmsTemplate;  
  25.     }  
  26.   
  27.     /** 
  28.      * @return Returns the msgheader. 
  29.      */  
  30.     public Properties getMsgheader() {  
  31.         return msgheader;  
  32.     }  
  33.   
  34.     /** 
  35.      * @param msgheader The msgheader to set. 
  36.      */  
  37.     public void setMsgheader(Properties msgheader) {  
  38.         this.msgheader = msgheader;  
  39.     }  
  40.   
  41.     /** 
  42.      * @return Returns the replyTo. 
  43.      */  
  44.     public Destination getReplyTo() {  
  45.         return replyTo;  
  46.     }  
  47.   
  48.     /** 
  49.      * @param replyTo The replyTo to set. 
  50.      */  
  51.     public void setReplyTo(Destination replyTo) {  
  52.         this.replyTo = replyTo;  
  53.     }  
  54.   
  55.     public void sendMesage(Object object) {  
  56.         JSONObject json = new JSONObject();  
  57.         json.put("orderData", object);  
  58.         jmsTemplate.convertAndSend(replyTo, json.toJSONString());  
  59.     }  
  60. }  

5.消息接收程序JMSReceiver.java。请注意此类实现了MessageListener接口,覆盖onMessage方法,这样就可以在spring的监听容器中配置本来为监听程序,一旦监听的队列中有消息,就会触发本类中的onMessage方法。

  1. package com.watson.jms;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.MessageListener;  
  6. import javax.jms.ObjectMessage;  
  7. import javax.jms.TextMessage;  
  8.   
  9. import org.springframework.jms.core.JmsTemplate;  
  10.   
  11. import com.ibm.mq.jms.MQQueue;  
  12.   
  13.   
  14. public class JMSReceiver implements MessageListener {  
  15.       
  16.     private JmsTemplate jmsTemplate;  
  17.       
  18.     private MQQueue receiveQueue;  
  19.     /** 
  20.      * @return Returns the jmsTemplate. 
  21.      */  
  22.     public JmsTemplate getJmsTemplate() {  
  23.         return jmsTemplate;  
  24.     }  
  25.     /** 
  26.      * @param jmsTemplate The jmsTemplate to set. 
  27.      */  
  28.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  29.         this.jmsTemplate = jmsTemplate;  
  30.     }  
  31.       
  32.     /** 
  33.      * @return Returns the receiveQueue. 
  34.      */  
  35.     public MQQueue getReceiveQueue() {  
  36.         return receiveQueue;  
  37.     }  
  38.     /** 
  39.      * @param receiveQueue The receiveQueue to set. 
  40.      */  
  41.     public void setReceiveQueue(MQQueue receiveQueue) {  
  42.         this.receiveQueue = receiveQueue;  
  43.     }  
  44.       
  45.     public void onMessage(Message message) {  
  46.         try {  
  47.             System.out.println("reviced msg is:" +(new java.util.Date())+":"+ ((TextMessage)message).getText());  
  48.         } catch (JMSException e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  
  52.       
  53.     public void processMessage(){  
  54.         Message msg = jmsTemplate.receive(receiveQueue.getBaseQueueName());  
  55.         try{  
  56.             if (msg instanceof ObjectMessage) {  
  57.                 ObjectMessage objMsg = (ObjectMessage) msg;  
  58.                 try {  
  59.                     Person person = (Person) objMsg.getObject();  
  60.                     System.out.println("用户名:" + person.getName() + "年龄:"  
  61.                             + person.getAge());  
  62.                 } catch (JMSException e) {  
  63.                     e.printStackTrace();  
  64.                 }  
  65.             }             
  66.         }catch(Exception e){  
  67.                 e.printStackTrace();  
  68.         }  
  69.           
  70.     }  
  71.   
  72. }  
6.单元测试程序

  1. package com.junit;  
  2. import org.junit.Test;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. import com.watson.jms.JMSReceiver;  
  7. import com.watson.jms.JMSSender;  
  8. import com.watson.jms.Person;  
  9.   
  10. public class JMSSenderTest {  
  11.       
  12.     @Test  
  13.     public void jmsSender() {  
  14.         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext-ibmmq.xml");  
  15.         JMSSender sender = (JMSSender)app.getBean("jmsSender");  
  16.         Person person = new Person("watson",20);  
  17.         sender.sendMesage(person);  
  18.     }  
  19.       
  20.     @Test  
  21.     public void jmsReceiver() {  
  22.         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext-ibmmq.xml");  
  23.         JMSReceiver receiver = (JMSReceiver)app.getBean("jmsReceiver");  
  24.         receiver.processMessage();  
  25.     }  
  26.   
  27. }  


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通过spring开发ActiveMQ简单应用
spring整合activemq消息队列之点对点模式
Doing flex with JMS: combining BlazeDS, sprin...
jms中使用spring框架
常用 jar(类库) 的 pom 依赖
Missing artifact javax.jms:jms:jar: Missing artifact com.sun.jdmk Missing artifact com.sun.jmx:jmxri解决办法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服