Spring JMS 整合 ActiveMQ

1.使用maven管理依赖包

复制代码

    
        junit
        junit
        4.12
        test
    
    
        org.apache.activemq
        activemq-all
        5.11.0
    
    
        org.springframework
        spring-jms
        4.1.4.RELEASE
    
      
        org.springframework  
        spring-test  
        4.1.4.RELEASE  
     
复制代码

 

2.队列消息的收发

2.1Spring配置文件

复制代码


 
    
    
        
    
     
    
    
        
        
            queue1
        
    
     
    
    
        
        
        
    
     
    
    
        
    
 
    
    
        
    

复制代码

2.2消息生产者代码

复制代码
package guo.examples.mq02.queue;
 
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
 
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
 
public class ProducerServiceImpl implements ProducerService {
 
  private JmsTemplate jmsTemplate;
   
  /**
   * 向指定队列发送消息
   */
  public void sendMessage(Destination destination, final String msg) {
    System.out.println("向队列" + destination.toString() + "发送了消息------------" + msg);
    jmsTemplate.send(destination, new MessageCreator() {
      public Message createMessage(Session session) throws JMSException {
        return session.createTextMessage(msg);
      }
    });
  }
 
/**
 * 向默认队列发送消息
 */
  public void sendMessage(final String msg) {
    String destination =  jmsTemplate.getDefaultDestination().toString();
    System.out.println("向队列" +destination+ "发送了消息------------" + msg);
    jmsTemplate.send(new MessageCreator() {
      public Message createMessage(Session session) throws JMSException {
        return session.createTextMessage(msg);
      }
    });
 
  }
 
  public void setJmsTemplate(JmsTemplate jmsTemplate) {
    this.jmsTemplate = jmsTemplate;
  }
 
}
复制代码

2.3消息消费者代码

复制代码
package guo.examples.mq02.queue;
 
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
 
import org.springframework.jms.core.JmsTemplate;
 
public class ConsumerServiceImpl implements ConsumerService {
 
    private JmsTemplate jmsTemplate;
 
    /**
     * 接受消息
     */
    public void receive(Destination destination) {
        TextMessage tm = (TextMessage) jmsTemplate.receive(destination);
        try {
            System.out.println("从队列" + destination.toString() + "收到了消息:\t"
                    + tm.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
 
    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }
 
}
复制代码

2.4队列消息监听

复制代码

    
        
        
            queue2
        
    
     
    
    
     
    
    
        
        
        
    
复制代码
复制代码
package guo.examples.mq02.queue;
 
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
 
public class QueueMessageListener implements MessageListener {
        //当收到消息时,自动调用该方法。
    public void onMessage(Message message) {
        TextMessage tm = (TextMessage) message;
        try {
            System.out.println("ConsumerMessageListener收到了文本消息:\t"
                    + tm.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
 
}
复制代码

3.主题消息收发

在使用Spring JMS的时候,主题(Topic)和队列消息的主要差异体现在JmsTemplate中"pubSubDomain"是否设置为True。如果为True,则是Topic;如果是false或者默认,则是queue。

< property  name = "pubSubDomain"  value = "true"  />

3.1Spring配置

复制代码

    
        
            guo_topic
        
    
    
    
        
        
        
        
    
    
    
        
    
    
    
    
    
    
        
        
        
    
复制代码

3.2消息发布者

复制代码
package guo.examples.mq02.topic;
 
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
 
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
 
public class TopicProvider {
 
    private JmsTemplate topicJmsTemplate;
 
    /**
     * 向指定的topic发布消息
     * 
     * @param topic
     * @param msg
     */
    public void publish(final Destination topic, final String msg) {
 
        topicJmsTemplate.send(topic, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                System.out.println("topic name 是" + topic.toString()
                        + ",发布消息内容为:\t" + msg);
                return session.createTextMessage(msg);
            }
        });
    }
 
    public void setTopicJmsTemplate(JmsTemplate topicJmsTemplate) {
        this.topicJmsTemplate = topicJmsTemplate;
    }
 
}
复制代码

3.3消息订阅者(监听)

复制代码
package guo.examples.mq02.topic;
 
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
 *和队列监听的代码一样。
 */
public class TopicMessageListener implements MessageListener {
 
    public void onMessage(Message message) {
        TextMessage tm = (TextMessage) message;
        try {
            System.out.println("TopicMessageListener \t" + tm.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
 
}
复制代码

4.测试

4.1 测试代码

复制代码
package guo.examples.mq02;
 
import javax.jms.Destination;
 
import guo.examples.mq02.queue.ConsumerService;
import guo.examples.mq02.queue.ProducerService;
import guo.examples.mq02.topic.TopicProvider;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
/**
 * 测试Spring JMS
 * 
 * 1.测试生产者发送消息
 * 
 * 2. 测试消费者接受消息
 * 
 * 3. 测试消息监听
 * 
 * 4.测试主题监听
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
// ApplicationContext context = new
// ClassPathXmlApplicationContext("applicationContext.xml");
@ContextConfiguration("/applicationContext.xml")
public class SpringJmsTest {
 
    /**
     * 队列名queue1
     */
    @Autowired
    private Destination queueDestination;
 
    /**
     * 队列名queue2
     */
    @Autowired
    private Destination queueDestination2;
 
    /**
     * 主题 guo_topic
     */
    @Autowired
    @Qualifier("topicDestination")
    private Destination topic;
 
    /**
     * 主题消息发布者
     */
    @Autowired
    private TopicProvider topicProvider;
 
    /**
     * 队列消息生产者
     */
    @Autowired
    @Qualifier("producerService")
    private ProducerService producer;
 
    /**
     * 队列消息生产者
     */
    @Autowired
    @Qualifier("consumerService")
    private ConsumerService consumer;
 
    /**
     * 测试生产者向queue1发送消息
     */
    @Test
    public void testProduce() {
        String msg = "Hello world!";
        producer.sendMessage(msg);
    }
 
    /**
     * 测试消费者从queue1接受消息
     */
    @Test
    public void testConsume() {
        consumer.receive(queueDestination);
    }
 
    /**
     * 测试消息监听
     * 
     * 1.生产者向队列queue2发送消息
     * 
     * 2.ConsumerMessageListener监听队列,并消费消息
     */
    @Test
    public void testSend() {
        producer.sendMessage(queueDestination2, "Hello China~~~~~~~~~~~~~~~");
    }
 
    /**
     * 测试主题监听
     * 
     * 1.生产者向主题发布消息
     * 
     * 2.ConsumerMessageListener监听主题,并消费消息
     */
    @Test
    public void testTopic() throws Exception {
        topicProvider.publish(topic, "Hello T-To-Top-Topi-Topic!");
    }
 
}
复制代码

 

4.2 测试结果

topic name 是topic: //guo_topic ,发布消息内容为:    Hello T-To-Top-Topi-Topic!
TopicMessageListener   Hello T-To-Top-Topi-Topic!
向队列queue: //queue2 发送了消息------------Hello China~~~~~~~~~~~~~~~
ConsumerMessageListener收到了文本消息: Hello China~~~~~~~~~~~~~~~
向队列queue: //queue1 发送了消息------------Hello world!
从队列queue: //queue1 收到了消息: Hello world!

5.代码地址

http://pan.baidu.com/s/1gdvPpWf

转载于:https://www.cnblogs.com/jiwus/p/5752325.html

你可能感兴趣的:(Spring JMS 整合 ActiveMQ)