概述:
下面将介绍如何在Spring下集成ActiveMQ。
消费者:同步接收;
目的地:topic

环境:
主要包括4个文件:
- HelloSender.java;
- JMSTest.java;
- ProxyJMSConsumer.java;
- applicationContext-jms.xml(配置文件);

需要使用的jar包如下:

源文件:
HelloSender.java
package com.ll.springActiveMQ1;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class HelloSender {
    /**
     * @param args
     * jmsTemplate和destination都是在spring配置文件中进行配制的
     * Sender只使用了配置文件中的jmsFactory,jmsTemplate,还有destination这三个属性
     */
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
        JmsTemplate template = (JmsTemplate) applicationContext.getBean("jmsTemplate");
        Destination destination = (Destination) applicationContext.getBean("destination");
        template.send(destination, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage("发送消息:Hello ActiveMQ Text Message2!");
            }
        });
        System.out.println("成功发送了一条JMS消息");
    }
}ProxyJMSConsumer.java
package com.ll.springActiveMQ1;
import javax.jms.Destination;
import javax.jms.TextMessage;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
/**
 * JMS消费者 消息题的内容定义 消息对象 接收消息对象后: 接收到的消息体*
 * <p>
 */
public class ProxyJMSConsumer {
  /**
   * 构造函数
   */
  public ProxyJMSConsumer() {
  }
  /**
   * 
   */
  private JmsTemplate jmsTemplate;
  public JmsTemplate getJmsTemplate() {
    return jmsTemplate;
  }
  public void setJmsTemplate(JmsTemplate jmsTemplate) {
    this.jmsTemplate = jmsTemplate;
  }
  /**
   * 监听到消息目的有消息后自动调用onMessage(Message message)方法
   */
  public void recive() {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
        "applicationContext-jms.xml");
    Destination destination = (Destination) applicationContext
        .getBean("destination");
    while (true) {
      try {
        //同步接收
        TextMessage txtmsg = (TextMessage) jmsTemplate
            .receive(destination);
        if (null != txtmsg) {
          System.out.println("[DB Proxy] " + txtmsg);
          System.out.println("[DB Proxy] 收到消息内容为: "
              + txtmsg.getText());
        } else {
          break;
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}JMSTest.java
package com.ll.springActiveMQ1;
import org.apache.commons.logging.Log;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JMSTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
        ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext.getBean("messageReceiver");
        proxyJMSConsumer.recive();
        
        System.out.println("初始化消息消费者");
    }
}配置文件:
applicationContext-jms.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd"
    default-autowire="byName">
    <!-- 配置connectionFactory -->
    <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        destroy-method="stop">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL">
                    <value>tcp://127.0.0.1:61616</value>
                </property>
            </bean>
        </property>
        <property name="maxConnections" value="100"></property>
    </bean>
    <!-- Spring JMS Template -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
        <property name="defaultDestinationName" value="subject" />
        <!-- 区别它采用的模式为false是p2p为true是订阅 -->
        <property name="pubSubDomain" value="true" />
    </bean>
    <!-- 发送消息的目的地(一个队列) -->
    <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
        <!-- 设置消息队列的名字 -->
        <constructor-arg index="0" value="subject" />
    </bean>
    <bean id="messageReceiver" class="com.ll.springActiveMQ1.ProxyJMSConsumer">
       
    </bean>
    
</beans>运行顺序:
首先运行JMSTest,然后运行HelloSender。
运行结果:












