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

ActiveMQ 安装和spring 配置

2014-03-04 14:06 423 查看


ActiveMQ

1、环境:
Windows XP
apache-activemq-5.2.0-bin.zip

2、安装
解压缩到apache-activemq-5.2.0-bin.zip到一个目录,比如C:\apache-activemq-5.2.0

3、配置
配置就在C:\apache-activemq-5.2.0\conf目录下三个文件
activemq.xml
credentials.properties
log4j.properties

4、启动ActiveMQ
运行C:\apache-activemq-5.2.0\bin\activemq.bat

5、测试
ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find "61616"

C:\Documents and Settings\Administrator>netstat -an|find "61616"

TCP 0.0.0.0:61616 0.0.0.0:0 LISTENING


6、监控
ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。

admin:http://127.0.0.1:8161/admin/

demo:http://127.0.0.1:8161/demo/

下面是ActiveMQ5.2的一个最简单例子!
环境还是apache-activemq-5.2.0-bin.zip,需要注意的是,开发时候,要将apache-activemq- 5.2.0-bin.zip解压缩后里面的activemq-all-5.2.0.jar包加入到classpath下面,这个包包含了所有jms接口 api的实现。

Maven 包:

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-all</artifactId>

<version>${activemq.version}</version>

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-pool</artifactId>

<version>${activemq.version}</version>

</dependency>

<dependency>

<groupId>org.apache.qpid</groupId>

<artifactId>proton-jms</artifactId>

<version>0.4</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jms</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.apache.openejb</groupId>

<artifactId>commons-dbcp-all</artifactId>

<version>1.3-r699049</version>

<type>jar</type>

<scope>compile</scope>

</dependency>

1. 集成环境

Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可以下载。本文是将Spring集成ActiveMQ来发送和接收JMS消息。

2. 集成步骤

将下载的ActiveMQ解压缩后文件夹如下



activemq-all-5.4.2.jar是activemq的所有的类jar包。lib下面是模块分解后的jar包。将lib下面的

Java代码



/lib/activation-1.1.jar

/lib/activemq-camel-5.4.2.jar

/lib/activemq-console-5.4.2.jar

/lib/activemq-core-5.4.2.jar

/lib/activemq-jaas-5.4.2.jar

/lib/activemq-pool-5.4.2.jar

/lib/activemq-protobuf-1.1.jar

/lib/activemq-spring-5.4.2.jar

/lib/activemq-web-5.4.2.jar

文件全部拷贝到项目中。

而Spring项目所需要的jar包如下

Java代码



/lib/spring-beans-2.5.6.jar

/lib/spring-context-2.5.6.jar

/lib/spring-context-support-2.5.6.jar

/lib/spring-core-2.5.6.jar

/lib/spring-jms-2.5.6.jar

/lib/spring-tx.jar

当然还需要一些其他的jar文件

Java代码



/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar

/lib/jms-1.1.jar

/lib/log4j-1.2.15.jar

/lib/slf4j-api-1.6.1.jar

/lib/slf4j-nop-1.6.1.jar

项目的依赖jar都准备好后就可以写配置文件了。

Spring配置文件

配置文件内容如下

Java代码



<?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="listenerContainer"

class="org.springframework.jms.listener.DefaultMessageListenerContainer">

<property name="concurrentConsumers" value="10" />

<property name="connectionFactory" ref="jmsFactory" />

<property name="destinationName" value="subject" />

<property name="messageListener" ref="messageReceiver" />

<property name="pubSubNoLocal" value="false"></property>

</bean>

<bean id="messageReceiver"

class="com.liuyan.jms.consumer.ProxyJMSConsumer">

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

</bean>

</beans>

编写代码

消息发送者:这里面消息生产者并没有在Spring配置文件中进行配置,这里仅仅使用了Spring中的JMS模板和消息目的而已。

Java代码



public class HelloSender {

/**

* @param args

*/

public static void main(String[] args) {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

new String[] { "classpath:/spring/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 Message!");

}

});

System.out.println("成功发送了一条JMS消息");

}

}

消息接收

Java代码



/**

* JMS消费者

*

*

* <p>

* 消息题的内容定义

* <p>

* 消息对象 接收消息对象后: 接收到的消息体* <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(

new String[] { "classpath:/spring/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();

}

}

}

}

这里边也是并不是直接使用Spring来初始化建立消息消费者实例,而是在此消费者注入了JMS模板而已。

写一个main入口,初始化消息消费者

Java代码



public class JMSTest {

/**

* @param args

*/

public static void main(String[] args) {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

new String[] { "classpath:/spring/applicationContext-jms.xml" });

ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext

.getBean("messageReceiver");

System.out.println("初始化消息消费者");

}

}

使用的时候先开启ActiveMQ服务,默认是占用了61616端口。之后开启测试程序,开启2个消息消费者监听。之后再运行消息生产者的代码后,消息就可以被消息消费者接收到了。

1. 集成环境

Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可以下载。本文是将Spring集成ActiveMQ来发送和接收JMS消息。

2. 集成步骤

将下载的ActiveMQ解压缩后文件夹如下



activemq-all-5.4.2.jar是activemq的所有的类jar包。lib下面是模块分解后的jar包。将lib下面的

Java代码



/lib/activation-1.1.jar

/lib/activemq-camel-5.4.2.jar

/lib/activemq-console-5.4.2.jar

/lib/activemq-core-5.4.2.jar

/lib/activemq-jaas-5.4.2.jar

/lib/activemq-pool-5.4.2.jar

/lib/activemq-protobuf-1.1.jar

/lib/activemq-spring-5.4.2.jar

/lib/activemq-web-5.4.2.jar

文件全部拷贝到项目中。

而Spring项目所需要的jar包如下

Java代码



/lib/spring-beans-2.5.6.jar

/lib/spring-context-2.5.6.jar

/lib/spring-context-support-2.5.6.jar

/lib/spring-core-2.5.6.jar

/lib/spring-jms-2.5.6.jar

/lib/spring-tx.jar

当然还需要一些其他的jar文件

Java代码



/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar

/lib/jms-1.1.jar

/lib/log4j-1.2.15.jar

/lib/slf4j-api-1.6.1.jar

/lib/slf4j-nop-1.6.1.jar

项目的依赖jar都准备好后就可以写配置文件了。

Spring配置文件

配置文件内容如下

Java代码



<?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="listenerContainer"

class="org.springframework.jms.listener.DefaultMessageListenerContainer">

<property name="concurrentConsumers" value="10" />

<property name="connectionFactory" ref="jmsFactory" />

<property name="destinationName" value="subject" />

<property name="messageListener" ref="messageReceiver" />

<property name="pubSubNoLocal" value="false"></property>

</bean>

<bean id="messageReceiver"

class="com.liuyan.jms.consumer.ProxyJMSConsumer">

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

</bean>

</beans>

编写代码

消息发送者:这里面消息生产者并没有在Spring配置文件中进行配置,这里仅仅使用了Spring中的JMS模板和消息目的而已。

Java代码



public class HelloSender {

/**

* @param args

*/

public static void main(String[] args) {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

new String[] { "classpath:/spring/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 Message!");

}

});

System.out.println("成功发送了一条JMS消息");

}

}

消息接收

Java代码



/**

* JMS消费者

*

*

* <p>

* 消息题的内容定义

* <p>

* 消息对象 接收消息对象后: 接收到的消息体* <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(

new String[] { "classpath:/spring/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();

}

}

}

}

这里边也是并不是直接使用Spring来初始化建立消息消费者实例,而是在此消费者注入了JMS模板而已。

写一个main入口,初始化消息消费者

Java代码



public class JMSTest {

/**

* @param args

*/

public static void main(String[] args) {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

new String[] { "classpath:/spring/applicationContext-jms.xml" });

ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext

.getBean("messageReceiver");

System.out.println("初始化消息消费者");

}

}

使用的时候先开启ActiveMQ服务,默认是占用了61616端口。之后开启测试程序,开启2个消息消费者监听。之后再运行消息生产者的代码后,消息就可以被消息消费者接收到了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: