您的位置:首页 > 编程语言 > Java开发

【ActiveMQ入门-8】ActiveMQ学习-与Spring集成

2015-04-30 09:37 471 查看
概述:[/b]下面将介绍如何在Spring下集成ActiveMQ。消费者:同步接收;目的地:topic


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


需要使用的jar包如下:



源文件:[/b]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消息");

}

}

[/code]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();

}


}

}


}

[/code]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("初始化消息消费者");

}


}

[/code]
配置文件:[/b]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"[/code] 
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">

  <property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>


</beans>

[/code]

[/b]运行顺序:[/b]首先运行JMSTest,然后运行HelloSender。

[/b]运行结果:[/b]




来自为知笔记(Wiz)

附件列表

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: