zoukankan      html  css  js  c++  java
  • spring监听与IBM MQ JMS整合

    spring xml 的配置:

     文件名:applicationContext-biz-mq.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:tx="http://www.springframework.org/schema/tx"  
    5.     xmlns:jms="http://www.springframework.org/schema/jms"  
    6.     xmlns:aop="http://www.springframework.org/schema/aop"  
    7.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    8.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
    9.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
    10.         http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd ">  
    11.     <description>MQ</description>  
    12.   
    13.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    14.         <property name="locations">  
    15.             <list>  
    16.                 <value>classpath:/mqconnect.properties</value>  
    17.             </list>  
    18.         </property>  
    19.         <property name="ignoreUnresolvablePlaceholders" value="true" />  
    20.     </bean>  
    21.       
    22.     <!-- 业务实现类 -->  
    23.     <bean id="callRecordBiz" class="com.zmcc.servicemanager.biz.impl.CallRecordBizImpl" autowire="byName"/>  
    24.       
    25.     <!-- <bean id="mqMessageSend" class="com.zmcc.servicemanager.mq.MQMessageSend">  
    26.         jie  
    27.         <property name="queueManagerName" value="${queue.manager.send}" />  
    28.         <property name="host" value="${queue.manager.host.send}" />  
    29.         <property name="destinationName" value="${queue.name.send}" />  
    30.     </bean>  
    31.   
    32.     <bean id="mqMessageReceiveListener" class="com.zmcc.servicemanager.mq.MQMessageReceiveListener" init-method="start">  
    33.         接收方队列管理器名  
    34.         <property name="queueManagerName" value="${queue.manager.get}" />  
    35.         <property name="host" value="${queue.manager.host.get}" />  
    36.         <property name="destinationName" value="${queue.name.get}" />  
    37.     </bean> -->  
    38.       
    39.      <!-- WebSphere MQ Connection Factory -->    
    40.      <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">  
    41.         <property name="hostName" value="${queue.manager.host.get}"/>  
    42.         <property name="queueManager" value="${queue.manager.get}"/>  
    43.         <property name="channel" value="${app.mq.channel}"/>  
    44.         <property name="port" value="${app.mq.port}"/>  
    45.         <property name="transportType" value="${app.mq.transportType}"/>  
    46.      </bean>  
    47.    
    48.     <!-- JMS Queue Connection Factory -->  
    49.     <bean id="transactionManager" class="org.springframework.jms.connection.JmsTransactionManager">  
    50.         <property name="connectionFactory" ref="mqConnectionFactory"/>  
    51.     </bean>  
    52.    
    53.     <!-- JMS Destination Resolver -->   
    54.     <!-- <bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver" /> -->  
    55.     <bean id="messageConverter" class="com.zmcc.servicemanager.mq.spring.MessageConverter" />  
    56.   
    57.     <!-- 定义接收者 -->  
    58.     <bean  id="messageListener" class="com.zmcc.servicemanager.mq.spring.MessageListener" >  
    59.         <property name="callRecordBiz" ref="callRecordBiz" />  
    60.     </bean>  
    61.       
    62.     <!-- JMS  listener -->  
    63.     <!-- <bean id="messageListenerAdapter" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
    64.         <property name="defaultListenerMethod" value="receviedMessage"/>  
    65.         <property name="messageConverter" ref="messageConverter"/>  
    66.         <property name="delegate" ref="messageListener"/>  
    67.     </bean> -->  
    68.       
    69.     <!--   
    70.         JMS listener   
    71.         listener:org.springframework.jms.listener.adapter.MessageListenerAdapter  
    72.         message-converter="messageConverter",  
    73.     -->  
    74.     <jms:listener-container connection-factory="mqConnectionFactory" transaction-manager="transactionManager"   
    75.         message-converter="messageConverter">  
    76.         <jms:listener destination="${queue.name.get}" ref="messageListener" method="receviedMessage" />  
    77.     </jms:listener-container>  
    78.       
    79. </beans>  

    mqconnect.properties配置文件:

    1. #通道名  
    2. app.mq.channel=SYSTEM.DEF.SVRCONN  
    3. #传输类型  
    4. app.mq.transportType=1  
    5. #端口号  
    6. app.mq.port=1414  
    7. #队列管理器名称-发送方  
    8. queue.manager.send=WMQ1QM  
    9. #主机地址-发送方  
    10. queue.manager.host.send=10.70.175.81  
    11. #队列名称-发送方  
    12. queue.name.send=WMQ1OutputQ  
    13.   
    14. #队列管理器名称--接收方  
    15. queue.manager.get=WMQ2QM  
    16. #主机地址--接收方  
    17. queue.manager.host.get=10.70.175.82  
    18. #队列名称--接收方  
    19. queue.name.get=WMQ2InputQ  

    MessageTest.Java测试文件,用来启动接收监听的配置文件:

    1. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    2.   
    3. public class MessageTest {  
    4.   
    5.     /** 
    6.      * @param args 
    7.      */  
    8.     public static void main(String[] args) {  
    9.         new ClassPathXmlApplicationContext("classpath*:/applicationContext-biz-mq.xml");  
    10.   
    11.     }  
    12.   
    13. }  

    MessageListener.java监听文件:

    1. import com.zmcc.servicemanager.biz.CallRecordBiz;  
    2. import com.zmcc.servicemanager.domain.CallRecord;  
    3.   
    4. /** 
    5.  * 消息监听器 
    6.  * @author ZouXia 
    7.  * 
    8.  */  
    9. public class MessageListener{  
    10.   
    11.     private CallRecordBiz callRecordBiz;  
    12.       
    13.     /** 
    14.      * 接收消息 
    15.      * @param callRecord 
    16.      */  
    17.     public void receviedMessage(CallRecord callRecord) {  
    18.         System.out.println(callRecord.getRequestContent());  
    19. //      callRecordBiz.saveEntity(callRecord);  
    20.     }  
    21.   
    22.     public CallRecordBiz getCallRecordBiz() {  
    23.         return callRecordBiz;  
    24.     }  
    25.   
    26.     public void setCallRecordBiz(CallRecordBiz callRecordBiz) {  
    27.         this.callRecordBiz = callRecordBiz;  
    28.     }  
    29.       
    30. }  

    MessageConverter.java用来转换的类:

    1. import javax.jms.JMSException;  
    2. import javax.jms.Message;  
    3. import javax.jms.Session;  
    4. import javax.jms.TextMessage;  
    5.   
    6. import org.springframework.jms.support.converter.MessageConversionException;  
    7.   
    8. import com.zmcc.servicemanager.domain.CallRecord;  
    9.   
    10. /** 
    11.  * 消息转换器 
    12.  * @author ZouXia 
    13.  * 
    14.  */  
    15. public class MessageConverter implements org.springframework.jms.support.converter.MessageConverter {  
    16.   
    17.     /** 
    18.      * 发送消息的转换 
    19.      */  
    20.     public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {  
    21.         return null;  
    22.     }  
    23.   
    24.     /** 
    25.      * 接收消息的转换 
    26.      */  
    27.     public Object fromMessage(Message message) throws JMSException,MessageConversionException {  
    28.         // TODO  
    29.         TextMessage mapMessage = (TextMessage) message;  
    30.         CallRecord callRecord = new CallRecord();  
    31.         callRecord.setEndTime(new Date());  
    32.         callRecord.setRequestContent(mapMessage.getText());  
    33.           
    34.         return callRecord;  
    35.     }  
    36.   
    37. }  


    CallRecord.java实体类

    1. public class CallRecord implements Serializable{  
    2.    
    3.      
    4.  private static final long serialVersionUID = 1L;  
    5.   
    6.  private String requestContent;  
    7.   
    8.  private Date endTime;  
    9.   
    10. ……  
    11.   
    12.    
    13.   
    14. }  



    JmsProducer.java发送消息:

    1. import javax.jms.Connection;  
    2. import javax.jms.Destination;  
    3. import javax.jms.JMSException;  
    4. import javax.jms.MessageProducer;  
    5. import javax.jms.Session;  
    6. import javax.jms.TextMessage;  
    7.   
    8. import com.ibm.mq.jms.JMSC;  
    9. import com.ibm.mq.jms.MQQueueConnectionFactory;  
    10.   
    11. /** 
    12.  * 点对点模式 
    13.  * @author ZouXia 
    14.  * 
    15.  */  
    16. public class JmsProducer {  
    17.   
    18.     /** 
    19.      * Main method 
    20.      *  
    21.      * @param args 
    22.      */  
    23.     public static void main(String[] args) {  
    24.   
    25.         // Variables  
    26.         Connection connection = null;  
    27.         Session session = null;  
    28.         Destination destination = null;  
    29.         MessageProducer producer = null;  
    30.   
    31.         try {  
    32.             // Create a connection factory  
    33.             // objects  
    34.             MQQueueConnectionFactory factory = new MQQueueConnectionFactory();  
    35.             factory.setQueueManager("WMQ1QM");  
    36.             factory.setHostName("10.70.175.81");  
    37.             factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);  
    38.             factory.setPort(1414);  
    39.             factory.setChannel("SYSTEM.DEF.SVRCONN");  
    40.   
    41.             // Create JMS objects  
    42.             connection = factory.createConnection();  
    43.             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
    44.             destination = session.createQueue("WMQ1OutputQ");  
    45.             producer = session.createProducer(destination);  
    46.   
    47.             long uniqueNumber = System.currentTimeMillis() % 1000;  
    48.             TextMessage message = session  
    49.                     .createTextMessage("JmsProducer: Your lucky number today is " + uniqueNumber);  
    50.   
    51.             // Start the connection  
    52.             connection.start();  
    53.   
    54.             // And, send the message  
    55.             producer.send(message);  
    56.             System.out.println("Sent message: " + message);  
    57.   
    58.         } catch (JMSException jmsex) {  
    59.             jmsex.fillInStackTrace();  
    60.         } finally {  
    61.             try {  
    62.                 producer.close();  
    63.                 session.close();  
    64.                 connection.close();  
    65.             } catch (JMSException e) {  
    66.                 e.printStackTrace();  
    67.             }  
    68.         }  
    69.     }   
    70.   
    71. }   


    所对应的发送方WMQ1QM的资源管理器:

    所对应的通道:

    接收方WMQ2QM的队列:

    通道:

    资源管理器即IBM MQ explorer是基于eclipse的进行的,在eclipse里面添加plug插件即可,其更新地址为:

    http://public.dhe.ibm.com/software/integration/wmq/explorer/v75/updates/

    如果出现以下问题:
    1. Exception in thread "main" java.lang.NoClassDefFoundError: javax/resource/ResourceException  
    2.     at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:490)  
    3.     at com.ibm.mq.jms.services.ConfigEnvironment.<clinit>(ConfigEnvironment.java:190)  
    4.     at java.lang.Class.forName0(Native Method)  
    5.     at java.lang.Class.forName(Class.java:247)  
    6.     at com.ibm.mq.jms.MQConnectionFactory$1.run(MQConnectionFactory.java:658)  
    7.     at java.security.AccessController.doPrivileged(Native Method)  
    8.     at com.ibm.mq.jms.MQConnectionFactory.<clinit>(MQConnectionFactory.java:651)  
    9.     at com.zmcc.servicemanager.mq.jms.JmsProducer.main(JmsProducer.java:36)  
    10. Caused by: java.lang.ClassNotFoundException: javax.resource.ResourceException  
    11.     at java.net.URLClassLoader$1.run(URLClassLoader.java:200)  
    12.     at java.security.AccessController.doPrivileged(Native Method)  
    13.     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
    14.     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)  
    15.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
    16.     at java.lang.ClassLoader.loadClass(ClassLoader.java:252)  
    17.     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)  
    18.     ... 8 more  
    pom.xml里面要引入connector.jar
    1. <dependency>  
    2.             <groupId>javax.resource</groupId>  
    3.             <artifactId>connector</artifactId>  
    4.             <version>1.0</version>  
    5.         </dependency>  
  • 相关阅读:
    Jenkins简明入门(三) -- Blue Ocean,让一切变得简单
    TeamForge使用指南
    Jenkins简明入门(二) -- 利用Jenkins完成Python程序的build、test、deployment
    谈谈Python中的decorator装饰器,如何更优雅的重用代码
    Jenkins简明入门(一) -- 安装
    Python CSV 超简明用法
    Intel CPU命名规则的简略解析
    ef core 2.1 利用Query Type查询视图
    asp.net core 开发环境自定义域名及端口
    ef core 使用include进行外键连接查询
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/7156447.html
Copyright © 2011-2022 走看看