一、pom.xml与mq.properties

Spring提供了对JMS的支持,需要添加Spring支持jms的包,如下:


    org.springframework
    spring-jms
    4.1.7.RELEASE

添加ActiveMQ的pool包,如下:


    org.apache.activemq
    activemq-pool
    5.11.1

添加xbean的标签配置,如下:


    org.apache.xbean
    xbean-spring
    3.16

pom.xml完整配置如下:


    5.9.0
    5.11.1
    4.1.7.RELEASE
    3.16
    3.3.2
    2.4
    1.3.1
    2.8.4
    1.9.13


    
        junit
        junit
	${junit.version}
    
    
    
        org.apache.commons
        commons-lang3
	${commons-lang3.version}
    
    
        commons-io
        commons-io
	${commons-io.version}
    
    
        commons-fileupload
	commons-fileupload
	${commons-fileupload.version}
    
    
    
        com.fasterxml.jackson.core
	jackson-databind
	${fasterxml.jackson.version}
    
    
        com.fasterxml.jackson.core
	jackson-core
	${fasterxml.jackson.version}
    
    
        org.codehaus.jackson
	jackson-core-asl
        ${codehaus.jackson.version}
    
    
        org.codehaus.jackson
	jackson-mapper-asl
	${codehaus.jackson.version}
    
    
    
        org.apache.activemq
	activemq-all
	${activemq.version}
    
    
        org.apache.activemq
	activemq-pool
	${activemq-pool.version}
    
    
        org.springframework
	spring-jms
	${spring.version}
    
    
        org.apache.xbean
	xbean-spring
	${xbean.version}
    
    
    
        org.springframework
        spring-context
	${spring.version}
    
    
    	org.springframework
	spring-context-support
	${spring.version}
    
    
        org.springframework
	spring-beans
	${spring.version}
    
    
        org.springframework
	spring-webmvc
	${spring.version}
    
    
        org.springframework
        spring-jdbc
	${spring.version}
    
    
        org.springframework
	spring-aspects
	${spring.version}
    
    
        org.springframework
	spring-test
	${spring.version}
    

二、mq.xml配置



    
    
    
    
    
    
    
      
    
          
        
        
        
        
        
        
                 
    
    
    
    
    
          
        
        
        
    

    
    
           
        
        
        
    
    
    
    
    
    
        
        
    

    
    
    
        
    
    
        
            
        
	

三、java类

3.1 消费者监听器

3.1.1 队列消息监听器

package com.liuy.mq.consumer.queue;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.stereotype.Component;

/**
 * 队列消息监听器1
 * @description 队列消息监听器1
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:15:19
 */
@Component
public class QueueReceiver1 implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
	    System.out.println("QueueReceiver1接收到消息:"+((TextMessage)message).getText());
	} catch (JMSException e) {
	    e.printStackTrace();
	}
    }
}
package com.liuy.mq.consumer.queue;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.stereotype.Component;

/**
 * 队列消息监听器2
 * @description 队列消息监听器2
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:15:19
 */
@Component
public class QueueReceiver2 implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
	    System.out.println("QueueReceiver2接收到消息:"+((TextMessage)message).getText());
	} catch (JMSException e) {
	    e.printStackTrace();
	}
    }
}

3.1.2 Topic消息监听器

package com.liuy.mq.consumer.topic;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.stereotype.Component;

/**
 * Topic消息监听器1
 * @description Topic消息监听器1
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:17:11
 */
@Component
public class TopicReceiver1 implements MessageListener{


    @Override
    public void onMessage(Message message) {
        try {
	    System.out.println("TopicReceiver1接收到消息:"+((TextMessage)message).getText());
	} catch (JMSException e) {
	    e.printStackTrace();
	}
    }
	
}
package com.liuy.mq.consumer.topic;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.stereotype.Component;

/**
 * Topic消息监听器2
 * @description Topic消息监听器2
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:17:11
 */
@Component
public class TopicReceiver2 implements MessageListener{


    @Override
    public void onMessage(Message message) {
    	try {
            System.out.println("TopicReceiver2接收到消息:"+((TextMessage)message).getText());
	} catch (JMSException e) {
	    e.printStackTrace();
	}
    }
	
}

3.2 消息生产者

package com.liuy.mq.producer.queue;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

/**
 * 队列消息生产者,发送消息到队列
 * @description 队列消息生产者,发送消息到队列
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:20:46
 */
@Component("queueSender")
public class QueueSender {
	
    @Autowired
    @Qualifier("jmsQueueTemplate")
    private JmsTemplate jmsTemplate;//通过@Qualifier修饰符来注入对应的bean
	
    /**
     * 发送一条消息到指定的队列(目标)
     * @param queueName 队列名称
     * @param message 消息内容
     */
    public void send(String queueName,final String message){
    	jmsTemplate.send(queueName, new MessageCreator() {
    	    @Override
	    public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
	    }
        });
    }
	
}
package com.liuy.mq.producer.topic;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

/**
 * Topic生产者发送消息到Topic
 * @description Topic生产者发送消息到Topic
 * @author liuy
 * @version V1.00
 * @date:2017年4月12日上午10:20:46
 */
@Component("topicSender")
public class TopicSender {
    @Autowired
    @Qualifier("jmsTopicTemplate")
    private JmsTemplate jmsTemplate;
	
    /**
     * 发送一条消息到指定的队列(目标)
     * @param queueName 队列名称
     * @param message 消息内容
     */
    public void send(String topicName,final String message){
        jmsTemplate.send(topicName, new MessageCreator() {
	    @Override
	    public Message createMessage(Session session) throws JMSException {
	        return session.createTextMessage(message);
	    }
	});
    }

}

四、测试

package com.liuy.test.common;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;

/**
 * 测试共公类
 * @description 测试共公类
 * @author liuy
 * @version V1.00
 * @date:2016年4月24日下午5:20:54
 */
@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(locations = "classpath:application-context.xml")
public class SpringJunitTest 
{

}
package com.liuy.test.core;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.liuy.mq.producer.queue.QueueSender;
import com.liuy.mq.producer.topic.TopicSender;
import com.liuy.test.common.SpringJunitTest;

/**
 * @description 描述
 * @author liuy
 * @version 1.0
 * @date:2017年4月11日下午9:00:18
 */
public class SpringQueueTest extends SpringJunitTest {
	@Autowired 
	private QueueSender queueSender;
	@Autowired 
	private TopicSender topicSender;
	
	/**
	 * 发送消息到队列
	 * Queue队列:仅有一个订阅者会收到消息,消息一旦被处理就不会存在队列中
	 * @param message
	 * @return String
	 */
	@Test
	public void testQueueSend() throws Exception {
		queueSender.send("test.queue", "测试");
	}
	
	/**
	 * 发送消息到主题
	 * Topic主题 :放入一个消息,所有订阅者都会收到 
	 * 这个是主题目的地是一对多的
	 * @param message
	 * @return String
	 */
	@Test
	public void testTopicSend() throws Exception {
		topicSender.send("test.topic", "测试222");
	}
}


效果:

 列队:

    wKioL1jtr5zRfnsxAAALOGTiKk8824.png

 主题:

    wKiom1jtr_TSyq09AAASyQz3W6U669.png