0
点赞
收藏
分享

微信扫一扫

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

概述:

下面将介绍如何在Spring下集成ActiveMQ。

消费者:同步接收;

目的地:topic

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


环境:

主要包括4个文件:

  1. HelloSender.java;
  2. JMSTest.java;
  3. ProxyJMSConsumer.java;
  4. applicationContext-jms.xml(配置文件);

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

需要使用的jar包如下:

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


源文件:

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消息");
}
}

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();
}

}
}

}

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("初始化消息消费者");
}

}

配置文件:

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"
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">

</bean>

</beans>


运行顺序:

首先运行JMSTest,然后运行HelloSender。


运行结果:

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

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


举报

相关推荐

0 条评论