ActiveMQ(五)——ActiviteMQ与Spring的集成

先导入spring相关的jar包:



 

再在src目录下添加spring配置文件applicaion.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    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-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
    <!-- 连接池 -->
    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
    	<property name="connectionFactory">
    	    <bean class="org.apache.activemq.ActiveMQConnectionFactory">
    	        <property name="brokerURL" value="tcp://localhost:61616"></property>
    	    </bean>
    	</property>    
    </bean>
    
    <!-- 连接工厂 -->
    <bean id="activeMQConnectionFatory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616"></property>
    </bean>
    
    <!-- 配置消息目标 destination-->
    <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
        <!-- 目标队列,在ActiveMQ管理员控制台创建 http://localhost:8161/admin/queues.jsp创建 -->
        <constructor-arg index="0" value="FouthQueue" /> <!-- 设置第一个参数为队列名 -->    
    </bean>
    
    <!-- 配置消息模板 jmsTemplate -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="activeMQConnectionFatory"></property>
        <property name="defaultDestination" ref="destination"></property>
        <property name="messageConverter">
            <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />
        </property>
    </bean>
    
</beans>

发送方代码:

package com.mycom.activemq;

import java.util.HashMap;
import java.util.Map;

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

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

/**
 * ActiviteMQ方式4:整合Spring 
 * 消息发送方(生产者)
 * 
 * @author guweiqiang
 */
public class SpringSender {

	/**
	 * 发送消息
	 */
	public static void sendMessage(final Map<String, Object> map) {
		// 读取Spring配置文件
		ApplicationContext context = new FileSystemXmlApplicationContext(
				"classpath:applicaion.xml");

		// 获取JmsTemplate对象
		JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");

		// 利用 JmsTemplate 发送消息
		jmsTemplate.send(new MessageCreator() {

			@Override
			public Message createMessage(Session session) throws JMSException {
				// 发送消息
				MapMessage mapMsg = session.createMapMessage();
				mapMsg.setInt("ID", (Integer) map.get("id"));
				mapMsg.setString("NAME", (String) map.get("name"));
				mapMsg.setInt("AGE", (Integer) map.get("age"));
				System.out.println(mapMsg);

				return mapMsg;
			}
		});
	}

	/**
	 * 测试方法
	 */
	public static void main(String[] args) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("id", 10043);
		map.put("name", "guweiqiang43");
		map.put("age", 143);
		SpringSender.sendMessage(map);
	}
}

接收方代码:

package com.mycom.activemq;

import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;

/**
 * ActiviteMQ方式4:整合Spring 
 * 消息接收方(消费者)
 * 
 * @author guweiqiang
 */
public class SpringReceiver {

	/**
	 * 接收消息
	 */
	public static void receiveMessage() {
		// 读取Spring配置文件
		ApplicationContext context = new FileSystemXmlApplicationContext(
				"classpath:applicaion.xml");

		// 获取JmsTemplate对象
		JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");

		// 利用 JmsTemplate 接收消息
		while (true) {
			@SuppressWarnings("unchecked")
			Map<String, Object> map = (Map<String, Object>) jmsTemplate
					.receiveAndConvert();
			System.out.println("ID:" + map.get("ID") + "\t NAME:"
					+ map.get("NAME") + "\t AGE:" + map.get("AGE"));
		}
	}

	/**
	 * 测试方法
	 */
	public static void main(String[] args) {
		SpringReceiver.receiveMessage();
	}
}

启动ActiveMQ,再在本地执行上述发送方和接收方代码,运行结果如下:

发送方console:

ActiveMQMapMessage {commandId = 0, responseRequired = false, messageId = null, originalDestination = null, originalTransactionId = null, producerId = null, destination = null, transactionId = null, expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null, persistent = false, type = null, priority = 0, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = false, readOnlyBody = false, droppable = false} ActiveMQMapMessage{ theTable = {NAME=guweiqiang43, AGE=143, ID=10043} }

 

接收方console:

ID:10043	 NAME:guweiqiang43	 AGE:143

猜你喜欢

转载自guwq2014.iteye.com/blog/2219823
今日推荐