1. Spring 整合 JMS 1.1 点对点模式1.1.1 消息生产者(1)创建工程 springjms_producer,在 POM 文件中引入 SpringJms 、activeMQ 以及单元测试相关依赖 (2)在 src/main/resources 下创建 spring 配置文件 applicationContext-jms-producer.xml [AppleScript] 纯文本查看 复制代码 <context:component-scan base-package="cn.itcast.demo"></context:component-scan>
<!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135:61616"/>
</bean>
<!-- Spring 用于管理真正的 ConnectionFactory 的 ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标 ConnectionFactory 对应真实的可以产生 JMS Connection 的 ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!-- Spring 提供的 JMS 工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个 connectionFactory 对应的是我们定义的 Spring 提供的那个 ConnectionFactory
对 象 -->
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue_text"/>
</bean> (3)在 cn.itcast.demo 包下创建消息生产者类 [AppleScript] 纯文本查看 复制代码 @Component
public class QueueProducer {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination queueTextDestination;
/**
*发送文本消息
*@param text
*/
public void sendTextMessage(final String text){ jmsTemplate.send(queueTextDestination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(text);
}
});
}
} (4)单元测试 在 src/test/java 创建测试类 [AppleScript] 纯文本查看 复制代码 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:applicationContext-jms-producer.xml") public class TestQueue {
@Autowired
private QueueProducer queueProducer;
@Test
public void testSend(){ queueProducer.sendTextMessage("SpringJms-点对点");
}
} 1.1.1 消息消费者 (1)创建工程 springjms_consumer,在 POM 文件中引入依赖 (同上一个工程) (2)创建配置文件 applicationContext-jms-consumer-queue.xml [AppleScript] 纯文本查看 复制代码 <!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135:61616"/>
</bean>
<!-- Spring 用于管理真正的 ConnectionFactory 的 ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标 ConnectionFactory 对应真实的可以产生 JMS Connection 的 ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue_text"/>
</bean>
<!-- 我的监听类 -->
<bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>
<!-- 消息监听容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queueTextDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean> (3)编写监听类 [AppleScript] 纯文本查看 复制代码 public class MyMessageListener implements MessageListener {
public void onMessage(Message message) { TextMessage textMessage=(TextMessage)message; try {
System.out.println("接收到消息:"+textMessage.getText());
} catch (JMSException e) { e.printStackTrace();
}
}
} (4)创建测试类 [AppleScript] 纯文本查看 复制代码 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-consumer-queue.xm l")
public class TestQueue { @Test
public void testQueue(){
try {
System.in.read();
} catch (IOException e) { e.printStackTrace();
}
}
} 3.2 发布/订阅模式 3.2.1 消息生产者 (1)在工程 springjms_producer 的 applicationContext-jms-producer.xml 增加配置 [AppleScript] 纯文本查看 复制代码 <!--这个是订阅模式 文本信息-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic_text"/>
</bean> (2)创建生产者类 [AppleScript] 纯文本查看 复制代码 @Component
public class TopicProducer { @Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination topicTextDestination;
/**
*发送文本消息
*@param text
*/
public void sendTextMessage(final String text){ jmsTemplate.send(topicTextDestination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(text);
}
});
}
} (3)编写测试类 [AppleScript] 纯文本查看 复制代码 import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import cn.itcast.demo.TopicProducer; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-activemq-producer.xml ")
public class TestTopic { @Autowired
private TopicProducer topicProducer; @Test
public void sendTextQueue(){ topicProducer.sendTextMessage();
}
} 3.2.1 消息消费者 (1)在 activemq-spring-consumer 工 程 中 创 建 配 置 文 件 applicationContext-jms-consumer-topic.xml [AppleScript] 纯文本查看 复制代码 <!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.135:61616"/>
</bean>
<!-- Spring 用于管理真正的 ConnectionFactory 的 ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标 ConnectionFactory 对应真实的可以产生 JMS Connection 的 ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="topic_text"/>
</bean>
<!-- 我的监听类 -->
<bean id="myMessageListener" class="cn.itcast.demo.MyMessageListener"></bean>
<!-- 消息监听容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="topicTextDestination" />
<property name="messageListener" ref="myMessageListener" />
</bean> (2)编写测试类 [AppleScript] 纯文本查看 复制代码 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-jms-consumer-topic.xm l")
public class TestTopic { @Test
public void testTopic(){
try {
System.in.read();
} catch (IOException e) { e.printStackTrace();
}
}
} 测试:同时运行三个消费者工程,在运行生产者工程,查看三个消费者工程的控制台输出。
|