第一步:引用相关的jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>
第二步:配置Activemq整合spring。配置ConnectionFactory
<!--JMS服务厂商提供的ConnectionFactory--> <bean id="targetConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"> <constructor-arg name="brokerURL"value="tcp://192.168.25.168:61616"/> </bean> <!--spring对象ConnectionFactory的封装--> <bean id="connectionFactory"class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory"ref="targetConnectionFactory"></property> </bean> <!--配置JMSTemplate--> <bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"ref="connectionFactory"/> </bean> <!--配置消息的Destination对象 点到点 queue--> <bean id="test-queue"class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg name="name"value="test-queue"></constructor-arg> </bean> <bean id="itemAddtopic"class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg name="name"value="item-add-topic"></constructor-arg> </bean>
第三步 : 使用jmsTemplate来发送消息
@Test public void testJmsTemplate() throws Exception { //初始化spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml"); //从容器中获得JmsTemplate对象 JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class); //从容器中获得Destination对象 Destination destination = (Destination) applicationContext.getBean("test-queue"); //发送消息 jmsTemplate.send(destination, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage message = session.createTextMessage("spring activemq send queue message"); return message; } }); }
第四步 :接收消息
接收消息
import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import javax.xml.soap.Text; /** * 接收Activemq发送的消息 * <p>Title: MyMessageListener</p> * <p>Description: </p> * <p>Company: www.itcast.cn</p> * @version 1.0 */ public class MyMessageListener implements MessageListener { @Override public void onMessage(Message message) { try { //接收到消息 TextMessage textMessage = (TextMessage) message; String text = textMessage.getText(); System.out.println(text); } catch (Exception e) { e.printStackTrace(); } } }
<!-- JMS服务厂商提供的ConnectionFactory --> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <constructor-arg name="brokerURL" value="tcp://192.168.25.168:61616"/> </bean> <!-- spring对象ConnectionFactory的封装 --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="targetConnectionFactory"></property> </bean> <!-- 配置消息的Destination对象 --> <bean id="test-queue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg name="name" value="test-queue"></constructor-arg> </bean> <bean id="itemAddTopic" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg name="name" value="item-add-topic"></constructor-arg> </bean> <!-- 配置消息的接收者 --> <bean id="myMessageListener" class="com.taotao.search.listener.MyMessageListener"/> <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="test-queue" /> <property name="messageListener" ref="myMessageListener" /> </bean> <bean id="itemAddMessageListener" class="com.taotao.search.listener.ItemAddMessageListener"/> <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="itemAddTopic" /> <property name="messageListener" ref="itemAddMessageListener" /> </bean>
测试类
@Test public void testSpringActiveMq() throws Exception { //初始化spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml"); //等待 System.in.read(); }