现在的位置: 首页 > 综合 > 正文

spring 整合ibm mq 发送和接收消息

2017年12月25日 ⁄ 综合 ⁄ 共 7287字 ⁄ 字号 评论关闭

com.sharp.mq.test.SGMessageListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer的子类,继承是为了做异常处理)
                 connectionFactory    --连接工厂,用于连接队列管理器(JNDI
                destination        --连接某个队列(JNDI
                messageListener        --消息监听,用于接口消息   (自定义类)

 	<!-- 公共连接工厂,连接MQ队列管理器 -->
 	<bean id="mqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="java:jms/队列管理器名" />
	</bean>
	
	<!-- 公共jms模板,发送消息使用 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="mqConnectionFactory" />
	</bean>
	
 	<!--接收消息-->
 	<!-- 消息监听容器 -->
	<bean id="mqMSGReceiveContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="concurrentConsumers" value="1" />
		<property name="connectionFactory" ref="mqConnectionFactory" />
		<property name="destination" ref="receiveQueue" />
		<property name="messageListener" ref="qu_sms_msg_receive_biz" />
	</bean>
	
	<!-- 操作队列 -->
	<bean id="receiveQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="qu_asuraexp_msg_in" />
	</bean>
	
	<!-- 消息接收模板   -->
	<bean id="queueAccept" class="com.sharp.mq.accept.SGMessageListener" abstract="true">
		<property name="jmsConverter">
			 <!-- 消息转换 -->
			<bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
		</property>
	</bean>
	<!-- 自定义消息监听机制 -->
	<bean id="qu_sms_msg_receive_biz" class="com.sharp.mq.accept.MQReceive" parent="queueAccept"/>
	
	
	
	
	
	
	
	<!--发送消息-->
	<!-- 操作发送队列 -->
	<bean id="qu_mem_coupon_send_jndi" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="qu_scs_coupon_out" />
	</bean>
	
	<!-- 发送消息操作类 -->
	<bean id="mqSendAdapter" class="com.sharp.mq.send.SendJMSAdapter">
		<property name="jmsTemplate" ref="jmsTemplate" />
	</bean>

SGMessageListenerContainer:

package com.sharp.mq.accept;

import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;

import org.springframework.jms.listener.DefaultMessageListenerContainer;

public class SGMessageListenerContainer extends DefaultMessageListenerContainer
{

	public SGMessageListenerContainer()
	{
	}

	protected boolean receiveAndExecute(Session session, MessageConsumer consumer)
	        throws JMSException
	    {
	        boolean messageReceived = false;
	        try
	        {
	            messageReceived = super.receiveAndExecute(this, session, consumer);
	        }
	        catch(Throwable e)
	        {
	            handleException(e);
	        }
	        return messageReceived;
	    }

	protected void handleListenerException(Throwable ex)
	{
		super.handleListenerException(ex);
		handleException(ex);
	}

	private void handleException(Throwable e)
	{
	}
}

MQReceive :

package com.sharp.mq.accept;

public class MQReceive extends SGMessageListener
{

	@Override
	public void processMessage(String s)
	{
		System.out.println(s);
	}
	
}

SGMessageListener :

package com.sharp.mq.accept;

import javax.jms.Message;
import javax.jms.MessageListener;

import org.springframework.jms.support.converter.MessageConverter;

public abstract class SGMessageListener implements MessageListener
{

    public SGMessageListener()
    {
    }

    public void setJmsConverter(MessageConverter jmsConverter)
    {
        this.jmsConverter = jmsConverter;
    }

    public void onMessage(Message message)
    {
        try
        {
            String xml = (String)jmsConverter.fromMessage(message);
            processMessage(xml);
        }
        catch(Throwable e)
        {
        	e.printStackTrace();
        	throw new RuntimeException(e.getMessage());
        }
    }

    public abstract void processMessage(String s);

    private MessageConverter jmsConverter;
}

JNDI配置

<?xml version="1.0" encoding="UTF-8"?>

<connection-factories> 
	<!-- connection factory definition -->
	<tx-connection-factory>
		<jndi-name>jms/qm_scsdev</jndi-name>
		<xa-transaction />
		<rar-name>wmq.jmsra.rar</rar-name>
		<connection-definition>javax.jms.ConnectionFactory</connection-definition>
		<config-property name="channel" type="java.lang.String">CH_SCS_SVRCONN</config-property>
		<config-property name="hostName" type="java.lang.String">localhost</config-property>
		<config-property name="port" type="java.lang.String">1414</config-property>
		<config-property name="queueManager" type="java.lang.String">QM_SCSDEV</config-property>
		<config-property name="transportType" type="java.lang.String">CLIENT</config-property>
		<config-property name="CCSID" type="java.lang.String">1381</config-property>
		<max-pool-size>25</max-pool-size>
		<!--security-domain-and-application>JmsXARealm</security-domain-and-application -->
	</tx-connection-factory>



		<!-- ASURAEXP Msg Queue Config - QU_ASURAEXP_MSG_IN -->
	<mbean code="org.jboss.resource.deployment.AdminObject" name="jca.wmq:name=qu_asuraexp_msg_in">
		<attribute name="JNDIName">qu_asuraexp_msg_in</attribute>
		<depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'</depends>
		<attribute name="Type">javax.jms.Queue</attribute>
		<attribute name="Properties">
			baseQueueManagerName=QM_SCSDEV
			baseQueueName=QU_ASURAEXP_MSG_IN
			CCSID=1381
		</attribute>
	</mbean> 

		<!-- MEM Coupon Queue Config - QU_SCS_COUPON_OUT -->
	<mbean code="org.jboss.resource.deployment.AdminObject" name="jca.wmq:name=qu_scs_coupon_out">
		<attribute name="JNDIName">qu_scs_coupon_out</attribute>
		<depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'</depends>
		<attribute name="Type">javax.jms.Queue</attribute>
		<attribute name="Properties">
			baseQueueManagerName=QM_SCSDEV
			baseQueueName=QU_SCS_COUPON_OUT
			CCSID=1381
		</attribute>
	</mbean> 
</connection-factories>

发送消息篇

com.sharp.mq.accept.AsyncJMSAdapter()
            jmsTemplate    jms模板
            sendQueue    发送对列(JNDI)
            converter    消息转换(自定义消息转换器)

IJMSAdapter:

package com.sharp.mq.send;

import java.util.Map;


public interface IJMSAdapter
{

    public abstract Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object obj)
        throws MQException;

    public abstract Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object obj, String s)
        throws MQException;

    public abstract Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object obj, Map map)
        throws MQException;

    public abstract Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object obj, String s, Map map)
        throws MQException;
}

SendJMSAdapter:

package com.sharp.mq.send;

import java.util.Map;

import javax.jms.JMSException;
import javax.jms.Message;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessagePostProcessor;

import com.sharp.common.utils.xml.XmlTools;

public class SendJMSAdapter implements IJMSAdapter
{

    public Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object to)
        throws MQException
    {
        String xml = XmlTools.objectToXml(to);
        jmsTemplate.convertAndSend(sendQueue.getQueue(), xml);
        return null;
    }

    public Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object to, String correlationID)
        throws MQException
    {
        return send(sendQueue,to, correlationID, null);
    }

    public Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object to, Map header)
        throws MQException
    {
        return send(sendQueue,to, null, header);
    }

    public Object send(MQQueueConstant.SEND_QUEUE sendQueue, Object to, final String correlationID, final Map header)
        throws MQException
    {
        String xml = XmlTools.objectToXml(to);
        jmsTemplate.convertAndSend(sendQueue.getQueue(), xml, new MessagePostProcessor()
		{
			
			@Override
			public Message postProcessMessage(Message arg0) throws JMSException
			{
				return arg0;
			}
		});
        return null;
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate)
    {
        this.jmsTemplate = jmsTemplate;
    }

    private JmsTemplate jmsTemplate;
}

放置wmq.jmsra-ds.xml文件和wmq.jmsra.rar文件在D:\JBoss-4.2-scs\server\default\deploy\jms  目录内

更新jar 包:

更新 jboss_home\server\default\lib,需更新以下jar包

com.ibm.mqetclient.jar

jms.jar

jta-1.1.jar

jta-spec1_0_1.jar

ojdbc14.jar

JBoss相关jar包删除

 把jboss-**\server\default(或者其它选择部署的目录)\lib下的hibernate*.jar删除(一般为以下列表的5个)

 删除包列表:

hibernate3.jar

hibernate-annotations.jar

hibernate-commons-annotations.jar

hibernate-entitymanager.jar

hibernate-validator.jar

抱歉!评论已关闭.