Sping整合ActiveMQ(一.简单Queue通信)
简单配置:只作JMSTemplate和Destination的配置,进行简单的消息传送
1.Pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ActiveMQ-Spring2</groupId> <artifactId>ActiveMQ-Spring2</artifactId> <version>1.0-SNAPSHOT</version> <properties> <junit-version>4.10</junit-version> <slf4j-version>1.7.5</slf4j-version> <spring-version>3.2.3.RELEASE</spring-version> <jms-version>2.0</jms-version> <activemq-version>5.6.0</activemq-version> <geronimo-version>1.0.1</geronimo-version> </properties> <dependencies> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> </dependency> <!--slf4j--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-version}</version> </dependency> <!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-version}</version> </dependency> <!--Spring-JMS--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring-version}</version> </dependency> <!--Javax-JMS--> <dependency> <groupId>javax.jms</groupId> <artifactId>javax.jms-api</artifactId> <version>${jms-version}</version> </dependency> <!--ActiveMQ--> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>${activemq-version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>${activemq-version}</version> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-j2ee-management_1.1_spec</artifactId> <version>${geronimo-version}</version> </dependency> </dependencies> </project>
2.Spring配置文件ApplicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <!--创建JMS连接工厂--> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> </bean> <!--声明ActiveMQ消息目标,目标可以是一个队列Queue,也可以是一个主题Topic--> <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="FirstQueue"/> </bean> <!--配置JMS模板--> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory"/> <property name="defaultDestination" ref="destination"/> <!--此处可省--> </bean> </beans>
3.发送消息测试类Sender
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; public class Sender { public static void main(String[] args) { /*1.加载配置文件*/ ApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] { "classpath:/applicationContext.xml" }); /*2.获取JmsTemplate实例对象*/ JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate"); /*当配置文件中的JmsTemplate的Bean中没有配置Destination的property的时候, 使用如下注释的方式*/ //Destination destination = (Destination) ctx.getBean("destination"); //template.send(destination, new MessageCreator() {......} template.send(new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage("发送消息:Hello ActiveMQ Text Message!"); } }); System.out.println("成功发送了一条JMS消息"); } }
4.接收消息测试类Receiver
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import javax.jms.JMSException; import javax.jms.TextMessage; public class Receive { public static void main(String[] args) throws JMSException { /*1.加载配置文件*/ ApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] { "classpath:/applicationContext.xml" }); /*2.获取JMSTemplate实例*/ JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate"); //Destination destination = (Destination) ctx.getBean("destination"); /*开始接收消息*/ while (true) { /*当配置文件中的JmsTemplate的Bean中没有配置Destination的property的时候, 使用如下注释的方式*/ //TextMessage txtmsg = (TextMessage) template.receive(destination); TextMessage message = (TextMessage) jmsTemplate.receive(); if (null != message) { System.out.println("收到消息为:" + message.getText()); } else break; } } }